|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как нарисовать стрелку с наконечником не на конце?
Здравствуйте! Рисую стрелку этим кодом
Код:
procedure arrow(nachalo,konec:tpoint); var B, deltaX, deltaY: Extended; begin Image1.Canvas.PenPos := nachalo;// nachalo - координаты начала стрелки Image1.Canvas.LineTo(konec.x, konec.y); if nachalo.x <> konec.x then // проверка деление на ноль begin if (nachalo.X > konec.X) then B := DegToRad(135) - ArcTan((nachalo.Y - konec.Y) / (nachalo.X - konec.X)) else B := DegToRad(45) - ArcTan((nachalo.Y - konec.Y) / (nachalo.X - konec.X)); // наконечник стрелки под углом 45 deltaX := 10 * Cos(B); // длина стрелки deltaY := 10 * Sin(B); if (nachalo.X > konec.X) then begin Image1.Canvas.PenPos := Point(konec.X, konec.Y); Image1.Canvas.LineTo(konec.X - Trunc(deltaX), konec.Y + Trunc(deltaY)); Image1.Canvas.PenPos := Point(konec.X, konec.Y); Image1.Canvas.LineTo(konec.X + Trunc(deltaY), konec.Y + Trunc(deltaX)); end else begin Image1.Canvas.moveto(konec.X, konec.Y); Image1.Canvas.LineTo(konec.X - Trunc(deltaX), konec.Y + Trunc(deltaY)); Image1.Canvas.PenPos := Point(konec.X, konec.Y); Image1.Canvas.LineTo(konec.X - Trunc(deltaY), konec.Y - Trunc(deltaX)); end; end; |
#2
|
||||
|
||||
Вторая строчка в вашем коде
Код:
... Image1.Canvas.LineTo(konec.x + 20, konec.y + 20); ... З.Ы. Ну и конечно, дописать в начало Код:
dec(konec.x, 20); dec(konec.y, 20); З.Ы.З.Ы. Да, что-то это не работает правильно... З.Ы.З.Ы.P.S. Нашлось по теме только такое Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 17.02.2014 в 08:39. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nano_bot (17.02.2014)
|
#3
|
|||
|
|||
спасибо! Помогло!
|
#4
|
||||
|
||||
Да нет, проблема осталась, такое действует лишь на прямых углах, потому как положение наконечника стрелки расчитывается от центра окружности чем является поинт konec и из-за этого на других углах происходит рассогласование в расположении наконечника. Вроде надо дорисовывать продолжение прямой линии стрелки с расчётом sin/cos относительно её начала, но у меня не получилось, погрешность вычислений плюс Pi / 2 заметно смещает добавляемый отрезок от нового центра окружности. Так и не вкурил, с математикой совсем видно напряги
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nano_bot (19.02.2014)
|