Показать сообщение отдельно
  #5  
Старый 21.02.2010, 19:35
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 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;
Мож кто-нить посоветует че попроще, всмысле поменьше ?
Ответить с цитированием