Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-12134
SPeller
2003-12-13 14:02
2004.01.05
Глюк IE?


7-12171
Step[B.M.]
2003-10-26 00:40
2004.01.05
Нумерация каждого Божего листа при печати


3-11821
stud
2003-12-08 10:17
2004.01.05
контроль временных параметров


4-12191
Yuri Btr
2003-11-04 16:00
2004.01.05
Способен ли сервис получать messages ?


14-12044
Desdechado
2003-12-11 11:18
2004.01.05
разработчикам сайта Мастеров





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский