
21.02.2010, 19:35
|
 |
Новичок
|
|
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
|
|
я еще вот это спрашивал
Цитата:
Сообщение от SerginhoLD
Теперь еще есть вопрос, как через две точки провести прямую? именно прямую а не линию, чтобы от точек было продолжение до конца формы, по идее можно это сделать по пиксельно, но может еще какой-нить вариант есть?
|
---
вот то что я еще спросил я все таки сделал, я тупо копировал отрезок далее до краев формы
но у меня получился просто здоровый огромный код
Код:
procedure pryamaya(p1,p2:Points; mycolor:TColor);// рисуем прямую через две точки
var ax,ay,bx,by,prx,pry: integer; // экранные координаты точек и разница в пикселях между точками
begin
otrezok(p1,p2,mycolor); // это своя процедура рисования отрезка через две точки
ax:=xs(p1.x); bx:=xs(p2.x); ay:=ys(p1.y); by:=ys(p2.y); // xs,ys - свои процедуры перевода точек в экранные координаты
prx:=abs(bx-ax); pry:=abs(by-ay);
if (p1.x < p2.x) and (p1.y > p2.y) then
begin // если p1 выше и левее p2 (это на обычной плоскости)
while ax > 0 do
begin // продолжаем наш отрезок влево
Form_serginho_geometry.Canvas.MoveTo(ax,ay);
ax:=ax-prx; ay:=ay-pry;
Form_serginho_geometry.Canvas.LineTo(ax,ay);
end;
while bx < Form_serginho_geometry.ClientWidth do
begin // продолжаем наш отрезок вправо
Form_serginho_geometry.Canvas.MoveTo(bx,by);
bx:=bx+prx; by:=by+pry;
Form_serginho_geometry.Canvas.LineTo(bx,by);
end;
end else // и т.д. и т.п.
if (p1.x > p2.x) and (p1.y > p2.y) then
begin // если p1 выше и правее p2
while ax < Form_serginho_geometry.ClientWidth do
begin
Form_serginho_geometry.Canvas.MoveTo(ax,ay);
ax:=ax+prx; ay:=ay-pry;
Form_serginho_geometry.Canvas.LineTo(ax,ay);
end;
while bx > 0 do
begin
Form_serginho_geometry.Canvas.MoveTo(bx,by);
bx:=bx-prx; by:=by+pry;
Form_serginho_geometry.Canvas.LineTo(bx,by);
end;
end else
if (p1.x > p2.x) and (p1.y < p2.y) then
begin // если p1 ниже и правее p2
while ax < Form_serginho_geometry.ClientWidth do
begin
Form_serginho_geometry.Canvas.MoveTo(ax,ay);
ax:=ax+prx; ay:=ay+pry;
Form_serginho_geometry.Canvas.LineTo(ax,ay);
end;
while bx > 0 do
begin
Form_serginho_geometry.Canvas.MoveTo(bx,by);
bx:=bx-prx; by:=by-pry;
Form_serginho_geometry.Canvas.LineTo(bx,by);
end;
end else
if (p1.x < p2.x) and (p1.y < p2.y) then
begin // если p1 ниже и левее p2;
while ax > 0 do
begin
Form_serginho_geometry.Canvas.MoveTo(ax,ay);
ax:=ax-prx; ay:=ay+pry;
Form_serginho_geometry.Canvas.LineTo(ax,ay);
end;
while bx < Form_serginho_geometry.ClientWidth do
begin
Form_serginho_geometry.Canvas.MoveTo(bx,by);
bx:=bx+prx; by:=by-pry;
Form_serginho_geometry.Canvas.LineTo(bx,by);
end;
end;
end;
Мож кто-нить посоветует че попроще, всмысле поменьше ? 
|