Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.11.2011, 15:05
Terney Terney вне форума
Прохожий
 
Регистрация: 30.09.2011
Сообщения: 7
Репутация: 10
По умолчанию Путаница с while и if

Необходимо нарисовать спираль на оси координат.
Рисую 2 пересекающихся отрезка, затем из Edit беру точку, из которой веду горизонтальную линию до пересечения с одним из отрезков (пусть это будет точка Б), нужно нарисовать еще несколько линий так, что бы получилась спираль, заканчивающаяся в точке пересечения двух изначальных отрезков (точка А) и все это должно происходить каждый раз по событию EditChange
Код:

Код:
    d :=(xp1-xp2)*(oy-oy) - (yp1-yp2)*(ox+w-ox);
    da:=(xp1-ox)*(oy-oy) - (yp1-oy)*(ox+w-ox);
    db:=(xp1-xp2)*(yp1-oy) - (yp1-yp2)*(xp1-ox);

    ta:=da /d;
    tb:=db /d;

    xt:= Trunc(a1+(ta*(a2-a1)));
    yt:= Trunc(b1+(ta*(b2-b1))); \\вычисляю координаты точки Б

      with img1.Canvas do
      begin
      Pen.Color:=clBlue;
      Pen.Width := 1;

      MoveTo(ox, oy);
      LineTo(xt, yt);
      end; \\ рисую линию до этой точки

  while ((xt=px) and (yt=py)) do \\спираль должна рисоваться до тех пор пока последняя точка Б не совпадет с точкой А
    begin
    if ((xt < px*40) AND (yt > h-py*40)) then
        begin
      a1:=xs1;
      a2:=xs2;
      b1:=ys1;
      b2:=ys2;
      c2:=xt;
      d2:=y0-400;
      end \\если точка Б слева и снизу от  точки А, то рисую линию вверх до очередной точки Б.
    else if ((xt < px*40) AND (yt < h-py*40)) then
        begin
      a1:=xp1;
      a2:=xp2;
      b1:=yp1;
      b2:=yp2;
      c2:=x0+w;
      d2:=yt;
      end \\если слева и сверху, то рисую вправо.. 

    else if((xt > px*40) AND (yt < h-py*40)) then
        begin
      a1:=xs1;
      a2:=xs2;
      b1:=ys1;
      b2:=ys2;
      c2:=xt;
      d2:=y0;
      end \\если справа и сверху, то рисую вниз..
      
    else if((xt > px*40) AND (yt > h-py*40)) then
        begin
      a1:=xp1;
      a2:=xp2;
      b1:=yp1;
      b2:=yp2;
      c2:=x0;
      d2:=yt;
      end; \\если справа и снизу, то рисую влево..

    d :=(a1-a2)*(d2-d1) - (b1-b2)*(c2-c1);
    da:=(a1-c1)*(d2-d1) - (b1-d1)*(c2-c1);
    db:=(a1-a2)*(b1-d1) - (b1-b2)*(a1-c1);

    ta:=da /d;
    tb:=db /d;

    xt:= Trunc(a1+(ta*(a2-a1)));
    yt:= Trunc(b1+(ta*(b2-b1))); \\подставляю числа в формулы, высчитываю точки Б

      with img1.Canvas do
      begin
      Pen.Color:=clBlue;
      Pen.Width := 1;

      MoveTo(ox, oy);
      LineTo(xt, yt);
      end;\\рисую линии от точки до точки

    c1:=xt;
    d1:=yt; \\в конце определяю координаты последней точки Б как начало линии в следующем цикле
  end;
end;
 end.

так вот, на деле рисуется только первая линия, дальше я возможно что-то напутал с циклом и условиями и ничего не рисуется..

на всякий случай прилагаю проект:
8.zip
и должно быть код можно упростить, но это потом..
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025