Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > стрелки в графе


Автор: EDG_aka_Dima 21.12.2007, 23:50
Подскажите пожалуйста, сижу прогу пишу и что то никак не додумаю как это написать:
рисую линию  form1.Canvas.LineTo и нужно сделать стрелочку из конечной точки в виде двух коротеньких линий под углом... какая то стрелка, а мозг не может придумать формулу smile 

Автор: EDG_aka_Dima 22.12.2007, 03:13
Таки найдено хорошее решение:
Код

...
var Arrow: array[0..2] of TPoint;
    SX, SY, EX, EY: integer;
    TanOfAngle: Extended;
    Angle, D, R: Extended;
    ...
begin
  ...
  if SX = EX then TanOfAngle:=MaxExtended / 100 * Sign(SY - EY)
  else TanOfAngle:=(SY - EY) / (SX - EX);
  D:=Sqrt(Sqr(SX - EX) + Sqr(SY - EY));
  EX:=Round((R * SX + (D - R) * EX) / D);
  EY:=Round((R * SY + (D - R) * EY) / D);
  Arrow[0].X:=EX;
  Arrow[0].Y:=EY;
  Angle:=ArcTan(TanOfAngle) + 0.2;
  if SX < EX then Angle:=Angle + Pi;
  Arrow[1].X:=EX + Round(20 * Cos(Angle));
  Arrow[1].Y:=EY + Round(20 * Sin(Angle));
  Angle:=ArcTan(TanOfAngle) - 0.2;
  if SX < EX then Angle:=Angle + Pi;
  Arrow[2].X:=EX + Round(20 * Cos(Angle));
  Arrow[2].Y:=EY + Round(20 * Sin(Angle));
  ACanvas.Polygon(Arrow);
end;


где:
SX, SY - координаты начала линии
EX, EY - координаты конца линии
R - расстояние от конца стрелки до конца отрезка
ACanvas - канва, на которой надо рисовать



взято с www.delphikingdom.com

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)