Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / как нарисовать на конце линии стрелку / 17 сообщений из 17, страница 1 из 1
17.04.2008, 12:55:15
    #35261594
dik_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нарисовать на конце линии стрелку
если известны координаты начала и конца линии?

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

неужели вычислить наклон линии и нарисовать стрелку так сложно
...
Рейтинг: 0 / 0
18.04.2008, 07:29:33
    #35263392
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нарисовать на конце линии стрелку
softwarerУчебник геометрии за пятый класс не помогает?
А разве геометрию не с седьмого по одиннадцатый изучают?
...
Рейтинг: 0 / 0
18.04.2008, 08:23:06
    #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
18.04.2008, 08:25:38
    #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
18.04.2008, 11:32:16
    #35263926
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нарисовать на конце линии стрелку
XDiaBLoА разве геометрию не с седьмого по одиннадцатый изучают?
У меня она была с пятого по одиннадцатый. С тех пор, конечно, что-то могло измениться, но это вряд ли принципиально.
...
Рейтинг: 0 / 0
18.04.2008, 12:14:52
    #35264144
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нарисовать на конце линии стрелку
softwarer XDiaBLoА разве геометрию не с седьмого по одиннадцатый изучают?
У меня она была с пятого по одиннадцатый. С тех пор, конечно, что-то могло измениться, но это вряд ли принципиально.
Ну да в принципе, пофик, но у меня она точно была с 7 по 11, даже учебник на все годы один был. 9 лет как школу окончил, но помню тот толстый учебник.

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

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

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

А итоговая формула после умножения будет та же (если в символьном виде считать).
...
Рейтинг: 0 / 0
20.04.2008, 15:57:58
    #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
21.04.2008, 10:45:14
    #35267766
tIT-GP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нарисовать на конце линии стрелку
Без тригонометрии некошерно.
Матрица вращения для одной стрелки - из пушки по воробьям (хотя кошерно).
Геометрия Погорелова расписана на 7-11 классы.
...
Рейтинг: 0 / 0
21.04.2008, 19:19:41
    #35269658
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нарисовать на конце линии стрелку
tIT-GPБез тригонометрии некошерно.
Матрица вращения для одной стрелки - из пушки по воробьям (хотя кошерно).
Геометрия Погорелова расписана на 7-11 классы.

Кошерны как раз алгоритмы вообще на одних сдвигах и сложениях.
...
Рейтинг: 0 / 0
22.04.2008, 07:00:02
    #35270071
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нарисовать на конце линии стрелку
tIT-GPБез тригонометрии некошерно.
Матрица вращения для одной стрелки - из пушки по воробьям (хотя кошерно).
Геометрия Погорелова расписана на 7-11 классы.
Ну не знаю, я вращал самолётик, из нескольких полосочек, правда там изначально просто было такое задание, про матрицы вращения и их использование...
...
Рейтинг: 0 / 0
17.04.2009, 19:18:40
    #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]