Форум: "Media";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизКак нарисовать стрелку. Ну типа как в WORDе? Найти похожие ветки
← →
DDS (2003-09-01 17:33) [0]Линия на КАНВЕ задана координатами начала и конца. Как доделать ее до стрелочки? Или вообще как нарисовать стрелку. Ну типа как в WORDе?
← →
Е-Моё имя (2003-09-02 12:01) [1]приляпать еще 2 линии
← →
DDS (2003-09-03 10:26) [2]Не просто же так приляпать, надо же, чтобы она правильная была
← →
Verg (2003-09-03 10:50) [3]Ну надо, очевидно, расчитать координаты начал этих двух "крылышек" у стрелки, учитывая координаты основной прямой.
Заложиться, например, углом наклона (Deg) крыльев и их длиной(len).
Ну, например:
type
PILine = ^TILine; //Это так я линию определил
TILine = record
lS : TPoint;
lE : TPoint;
end;
function RoundPoint(P, O : TPoint; Deg : double):TPoint;
begin
// Поворот точки P вокруг точки O на угол Deg (в радианах)
Result.X:=round((P.x-O.X)*cos(Deg)-(P.Y-O.Y)*sin(Deg)+O.X);
Result.y:=round((P.Y-O.Y)*cos(Deg)+(P.x-O.X)*sin(Deg)+O.Y);
end;
procedure DrawArrow(Cnv : TCanvas; Po, P1 : TPoint; Deg : double);
var Ha : TPoint;
begin
// Нарисуем стрелку, путем "приляпывания еще двух линий", где P1 -
// точка принадлежащая главной прямой и лежащая на нужном
//расстоянии (len) от головы этой линии
Cnv.MoveTo(Po.x, Po.Y);
Ha:=RoundPoint(P1, Po, Deg);
Cnv.LineTo(Ha.X, Ha.Y);
Ha:=RoundPoint(P1, Po, -Deg);
Cnv.MoveTo(Ha.X, Ha.Y);
Cnv.LineTo(Po.X, Po.Y);
end;
procedure ArrowedLine(C : TCanvas; const L : TILine;
Deg : double;
Len : integer);
var H1 : TPoint;
R : double;
begin
// Нарисуем
with L do
begin
C.MoveTo(lS.X,lS.Y);
C.LineTo(lE.X,lE.Y);
R:=sqrt(sqr(lE.X-lS.X)+sqr(lE.Y-lS.Y));
if R>len/2 then
begin
// Расчитаем базовую точку стрелки (крылья сложены)
R:=1-Len/R;
H1:=Point(round(lS.X+(lE.X-lS.X)*R) ,
round(lS.Y+(lE.Y-lS.Y)*R));
DrawArrow(C, lE, H1, Deg);
end;
end;
end;
Домашнее задание :))
1.Проверить приведенный код.
2.Дорисуйте стрелку дугой, соединяющей концы "крыльев" и имеющей вогнутость вовнутрь стрелки.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c