powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / как нарисовать на конце линии стрелку
17 сообщений из 17, страница 1 из 1
как нарисовать на конце линии стрелку
    #35261594
dik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если известны координаты начала и конца линии?

Модератор: Перенесено из C++
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35261608
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сообщить модератору ? Или сам поймешь?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35261671
dik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я искренне не знаю как высчитать координаты что бы стрелки были ровными, поэтому и спросил. ведь не известно же заранее под каким углом располагается линия.
это надо как то видимо через синусы косинусы решать а я не знаю как
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35262870
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учебник геометрии за пятый класс не помогает?
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35263212
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dik_kя искренне не знаю как высчитать координаты что бы стрелки были ровными, поэтому и спросил. ведь не известно же заранее под каким углом располагается линия.
это надо как то видимо через синусы косинусы решать а я не знаю как

неужели вычислить наклон линии и нарисовать стрелку так сложно
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35263392
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerУчебник геометрии за пятый класс не помогает?
А разве геометрию не с седьмого по одиннадцатый изучают?
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35263441
Трурль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dik_kесли известны координаты начала и конца линии?
Модератор: Перенесено из C++

Есть две точки - Начало и Конец. Допустим, рисуем стрелку в Конце, с углом отклонения УголСтрелки и длиной "крыльев" ДлинаКрыла.

1. Находим, какой угол у линии, относительно одной из осей (какой именно - не скажу т.к. их всего две - опытным путем проще выяснить)

УголЛинии=ArcTan2(Начало.X-Конец.X,Начало.Y-Конец.Y)

2. Рисуем одно "крыло": стрелки
Линия (Конец.X, Конец.Y, Конец.X+ДлинаКрыла*sin(УголЛинии+Угол) )

3. Рисуем другое "крыло": стрелки
Линия (Конец.X, Конец.Y, Конец.X+ДлинаКрыла*sin(УголЛинии-Угол) )

Скорее всего (по закону подлости) получится "вывернутая" стрелка, но и это легко исправить (добавляя, убирая, например, Pi или Pi/2 - простор для фантазии ;) )
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35263447
Трурль
2. Рисуем одно "крыло": стрелки
Линия (Конец.X, Конец.Y, Конец.X+ДлинаКрыла*sin(УголЛинии+Угол) )

3. Рисуем другое "крыло": стрелки
Линия (Конец.X, Конец.Y, Конец.X+ДлинаКрыла*sin(УголЛинии-Угол) )


Упс.... так торопился сумничать, что потерял cos. Надо так:

2. Рисуем одно "крыло": стрелки
Линия (Конец.X, Конец.Y, Конец.X+ДлинаКрыла*sin(УголЛинии+Угол) , Конец.Y+ДлинаКрыла*cos(УголЛинии+Угол) )

3. Рисуем другое "крыло": стрелки
Линия (Конец.X, Конец.Y, Конец.X+ДлинаКрыла*sin(УголЛинии-Угол) ,
Конец.Y+ДлинаКрыла*cos(УголЛинии-Угол)
)
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35263926
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoА разве геометрию не с седьмого по одиннадцатый изучают?
У меня она была с пятого по одиннадцатый. С тех пор, конечно, что-то могло измениться, но это вряд ли принципиально.
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35264144
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer XDiaBLoА разве геометрию не с седьмого по одиннадцатый изучают?
У меня она была с пятого по одиннадцатый. С тех пор, конечно, что-то могло измениться, но это вряд ли принципиально.
Ну да в принципе, пофик, но у меня она точно была с 7 по 11, даже учебник на все годы один был. 9 лет как школу окончил, но помню тот толстый учебник.

Короче, тут проще сделать стрелку которая например вертикально вверх кажет, и умножить координаты всех вершин на матрицу вращения Вроде так в универе делал.
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35264949
C#C++
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XDiaBLo softwarer XDiaBLoА разве геометрию не с седьмого по одиннадцатый изучают?
У меня она была с пятого по одиннадцатый. С тех пор, конечно, что-то могло измениться, но это вряд ли принципиально.
Ну да в принципе, пофик, но у меня она точно была с 7 по 11, даже учебник на все годы один был. 9 лет как школу окончил, но помню тот толстый учебник.

Да, точно, один учебник. Аффтар - Погорелов, по моему... ))
А вот с какого класса - не помню.
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35266556
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo softwarer XDiaBLoА разве геометрию не с седьмого по одиннадцатый изучают?
У меня она была с пятого по одиннадцатый. С тех пор, конечно, что-то могло измениться, но это вряд ли принципиально.
Ну да в принципе, пофик, но у меня она точно была с 7 по 11, даже учебник на все годы один был. 9 лет как школу окончил, но помню тот толстый учебник.

Короче, тут проще сделать стрелку которая например вертикально вверх кажет, и умножить координаты всех вершин на матрицу вращения Вроде так в универе делал.

А итоговая формула после умножения будет та же (если в символьном виде считать).
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35267022
Yuric74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dik_kесли известны координаты начала и конца линии?
Без тригонометрии. Выдернул из старого кода.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
procedure TfmMain.Button1Click(Sender: TObject);
var
  Pt1,Pt2:TPoint;
  dx,dy:integer;
  lx,ly,kx,ky:double;
  LineWidth:integer;
  ArrowLength:integer;
  ArrowWidth:integer;
  Coor:array[ 1 .. 3 ] of TPoint;
begin
  Pt1.X:= 210 ;
  Pt1.Y:= 300 ;
  Pt2.X:= 50 ;
  Pt2.Y:= 200 ;
  LineWidth:= 3 ;
  ArrowLength:= 15 ;
  ArrowWidth:= 5 ;

  dx:=Pt2.X-Pt1.X;
  dy:=Pt2.Y-Pt1.Y;
  kx:=Sign(dx);
  ky:=Sign(dy);
  if Abs(dx)>Abs(dy) then
    ky:=kx*dy/dx
  else
    kx:=ky*dx/dy;
  lx:=Pt2.X;
  ly:=Pt2.Y;
  Coor[ 1 ].x:=Round(lx-ArrowLength*kx+ArrowWidth*ky);
  Coor[ 1 ].y:=Round(ly-ArrowLength*ky-ArrowWidth*kx);
  Coor[ 2 ].x:=Round(lx);
  Coor[ 2 ].y:=Round(ly);
  Coor[ 3 ].x:=Round(lx-ArrowLength*kx-ArrowWidth*ky);
  Coor[ 3 ].y:=Round(ly-ArrowLength*ky+ArrowWidth*kx);

  Canvas.Pen.Width:=LineWidth;
  Canvas.Pen.Color:=clRed;
  Canvas.MoveTo(Pt1.X,Pt1.Y);
  Canvas.LineTo(Pt2.X,Pt2.Y);
  Canvas.MoveTo(Coor[ 1 ].X,Coor[ 1 ].Y);
  Canvas.LineTo(Coor[ 2 ].X,Coor[ 2 ].Y);
  Canvas.LineTo(Coor[ 3 ].X,Coor[ 3 ].Y);
end;
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35267766
tIT-GP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Без тригонометрии некошерно.
Матрица вращения для одной стрелки - из пушки по воробьям (хотя кошерно).
Геометрия Погорелова расписана на 7-11 классы.
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35269658
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tIT-GPБез тригонометрии некошерно.
Матрица вращения для одной стрелки - из пушки по воробьям (хотя кошерно).
Геометрия Погорелова расписана на 7-11 классы.

Кошерны как раз алгоритмы вообще на одних сдвигах и сложениях.
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35270071
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tIT-GPБез тригонометрии некошерно.
Матрица вращения для одной стрелки - из пушки по воробьям (хотя кошерно).
Геометрия Погорелова расписана на 7-11 классы.
Ну не знаю, я вращал самолётик, из нескольких полосочек, правда там изначально просто было такое задание, про матрицы вращения и их использование...
...
Рейтинг: 0 / 0
как нарисовать на конце линии стрелку
    #35939657
alexdup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelikk, почти кошерный алгоритм (почти, потому что есть деление)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
def DrawArrow(dc, pos1, pos2):
    
    """draw line from pos1 to pos2, with arrow at the 
    end. Arrow length is 1/10 of line length,
    arrow's width is 1/2 of arrow width"""
    
    # vector rotation pi/ 2  (counter)clock-wise
    def CW90(p):  return wx.Point(p.y, -p.x)
    def CCW90(p): return wx.Point(-p.y, p.x)
    
    dp=pos2-pos1
    dp.x/=- 10 
    dp.y/=- 10 
    
    dc.DrawLines([pos2, pos2+dp+CW90(dp), pos2+dp+CCW90(dp), pos2])
    dc.DrawLine(pos1.x, pos1.y, pos2.x+dp.x, pos2.y+dp.y)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / как нарисовать на конце линии стрелку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]