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.
Путаница с while и if
Рисую 2 пересекающихся отрезка, затем из Edit беру точку, из которой веду горизонтальную линию до пересечения с одним из отрезков (пусть это будет точка Б), нужно нарисовать еще несколько линий так, что бы получилась спираль, заканчивающаяся в точке пересечения двух изначальных отрезков (точка А) и все это должно происходить каждый раз по событию EditChange
Код:
Код:
так вот, на деле рисуется только первая линия, дальше я возможно что-то напутал с циклом и условиями и ничего не рисуется..
на всякий случай прилагаю проект:
[ATTACH]5394[/ATTACH]
и должно быть код можно упростить, но это потом..