Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Путаница с while и if

63K
09 ноября 2011 года
Andrew88
15 / / 03.06.2011
Необходимо нарисовать спираль на оси координат.
Рисую 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.


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

на всякий случай прилагаю проект:
[ATTACH]5394[/ATTACH]
и должно быть код можно упростить, но это потом..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог