Другие языки программирования и технологии
Delphi7 - как создать линии с единой точкой старта?
Всем привет. Продолжаю освоение Делфи и вот поймал ступор. Есть задание: нужно что бы пользователь вводил две координаты Х, У и эти координаты являлись бы точкой от куда бы выходили линии. В итоге должно получиться что-то вроде солнца (куча линий имеющих общую точку старта и разные концы). Мой код получился такой (пишу с комментариями): procedure TForm1.Button1Click(Sender: TObject); begin startX:=StrToInt(Edit1.Text); startY:=StrToInt(Edit2.Text); dX:=startX+100; // задаёт конечное значение для LineTo тобишь конечную точку dY:=startY+100; // тоже самое if (dX>0) and (dY>0) then // в системе координат Декарта это 1-вый квадрант тоесть что бы получился лучь надо от У отнять пиксель (в моём случает это 5 пикселей для большего шага) и к Х прибавить пиксель begin endX:=dX+5; endY:=dY-5; end; if (dX>0) and (dY<0) then // тот-же смысл для 3тьего квадранта begin endX:=dX-5; endY:=dY-5; end; if (dX<0) and (dY<0) then // для 4-того begin endX:=dX-5; endY:=dY+5; end; if (dX<0) and (dY>0) then // для 2-рого.. тобишь всё прописано по часовой begin endX:=dX+5; endY:=dY+5; end; Form1.Canvas.MoveTo(startX, startY); // начальная точка всех линий задаваемая пользователем for i:=1 to 200 do // процесс что бы он рисовал 200 линий begin Form1.Canvas.LineTo(endX, endY); end; end; end. Но увы не работает и не пойму в чём проблема. При вводе стартовой координаты просто рисует линию длинною 100 пикселей от заданных мною стартовых координат. Никакой процесс не идёт. П.С. можно не обязательно процесс, можно что бы при каждом след. клике конечная точка линии передвигалась в нужную позицию. Буду очень благодарен за помощь.
Вот примерный код:
angle := 0;
dlina := 40;
while angle <2*pi do
begin
MoveTo(100+trunc(sin(angle)*dlina),100+trunc(cos(angle)*dlina));
LineTo(100,100);
angle := angle +0.1;
end;
Чистая математика, если что - спрашивай
angle := 0;
dlina := 40;
while angle <2*pi do
begin
MoveTo(100+trunc(sin(angle)*dlina),100+trunc(cos(angle)*dlina));
LineTo(100,100);
angle := angle +0.1;
end;
Чистая математика, если что - спрашивай
строку
for i:=1 to 200 do // процесс что бы он рисовал 200 линий
begin
вставь перед
if (dX>0) and (dY>0) then // в системе координат Декарта это 1-вый квадрант тоесть что бы получился лучь надо от У отнять пиксель (в моём случает это 5 пикселей для большего шага) и к Х прибавить пиксель
и, вроде бы, оптимальней использовать конструкции типе elif, else if, но мешает не это. Лень считать-посмотри end-ов не много?
for i:=1 to 200 do // процесс что бы он рисовал 200 линий
begin
вставь перед
if (dX>0) and (dY>0) then // в системе координат Декарта это 1-вый квадрант тоесть что бы получился лучь надо от У отнять пиксель (в моём случает это 5 пикселей для большего шага) и к Х прибавить пиксель
и, вроде бы, оптимальней использовать конструкции типе elif, else if, но мешает не это. Лень считать-посмотри end-ов не много?
Перед LineTo надо делать MoveTo обратно в центр. Т. е.
with Form1.Canvas do begin
for i := 1 to 200 do begin
MoveTo(StartX, StartY);
// здесь вычисление новых EndX EndY
LineTo(EndX, EndY);
end;
end;
with Form1.Canvas do begin
for i := 1 to 200 do begin
MoveTo(StartX, StartY);
// здесь вычисление новых EndX EndY
LineTo(EndX, EndY);
end;
end;
Небольшой нескромный вопрос - ты вообще программировать умеешь?
Какой толк будет от вот этого:
for i:=1 to 200 do // процесс что бы он рисовал 200 линий
begin
Form1.Canvas.LineTo(endX, endY);
end;
если в этом цикле координаты ни разу не меняются, все время одни и те же?
Какой толк будет от вот этого:
for i:=1 to 200 do // процесс что бы он рисовал 200 линий
begin
Form1.Canvas.LineTo(endX, endY);
end;
если в этом цикле координаты ни разу не меняются, все время одни и те же?
ты координаты неправильные ставишь. нарисуй простой график и свое солнышко и посмотри какие координаты у конечных точек будут..
Советую после некого блока программы поставить messagebox('');
чтобы прерывать ее работу - смотришь на экран - если началась лажа, то смотришь код выше. ну конечно, текст в messagebox лучше разный, чтоб найти сразу. такой вот примитивный дебаггинг.
чтобы прерывать ее работу - смотришь на экран - если началась лажа, то смотришь код выше. ну конечно, текст в messagebox лучше разный, чтоб найти сразу. такой вот примитивный дебаггинг.
Похожие вопросы
- Есть некоторые данные (синяя линяя) . Каким алгоритмом можно найти где линия меняется (красные точки)?
- Как в 3D Max'е переместить (или создать) Линию (line) так, чтоб её конец точно привязался к центру Круга (circle)?
- русскоязычный help для Delphi7 c++ и паскаль
- Хочу начать писать программы. Начать пожалуй с Delphi7.
- Треугольники, круги, точки и линии
- Есть здесь кто-нибудь, работающий с Delphi7?
- Печуть из memo в Delphi7 как?
- Что легче выучить C++ или Delphi7 ?
- Решить задачу в Delphi7
- Где писать основной код в Delphi7