Другие языки программирования и технологии

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 пикселей от заданных мною стартовых координат. Никакой процесс не идёт. П.С. можно не обязательно процесс, можно что бы при каждом след. клике конечная точка линии передвигалась в нужную позицию. Буду очень благодарен за помощь.
Николай @@@@
Николай @@@@
53
Вот примерный код:

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;

Чистая математика, если что - спрашивай
AS
A S V
7 165
Лучший ответ
строку

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;
Небольшой нескромный вопрос - ты вообще программировать умеешь?
Какой толк будет от вот этого:
for i:=1 to 200 do // процесс что бы он рисовал 200 линий
begin
Form1.Canvas.LineTo(endX, endY);
end;
если в этом цикле координаты ни разу не меняются, все время одни и те же?
ты координаты неправильные ставишь. нарисуй простой график и свое солнышко и посмотри какие координаты у конечных точек будут..
GS
Galimzhan Shamkenov
13 661
Советую после некого блока программы поставить messagebox('');
чтобы прерывать ее работу - смотришь на экран - если началась лажа, то смотришь код выше. ну конечно, текст в messagebox лучше разный, чтоб найти сразу. такой вот примитивный дебаггинг.