
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Сообщ.
#1
,
|
|
|
задано 2 отрезка (х1,у1)-(х2,у2) и (х2,у2)-(х3,у3)
у этих отрезков есть 1 общая точка. и как найти угол? |
![]() |
Сообщ.
#2
,
|
|
И при чем тут Паскаль? Тебе формула нужна? Тогда переезжаем в Алгоритмы...
|
Сообщ.
#3
,
|
|
|
сор
![]() |
![]() |
Сообщ.
#4
,
|
|
Общая точка является концом отрезка, или может быть где угодно?
|
![]() |
|
|
не работает(
ИСХОДНИК должно в Form1.Caption писать размер угла ![]() ![]() unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Math, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; const x2=200; y2=200; x1=300; y1=200; var Form1: TForm1; a : single; implementation {$R *.dfm} procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var xa,ya,xb,yb : longint; begin xa:=x1-x2; ya:=y1-y2; xb:=x-x2; yb:=y-y2; a:=arccos((xa*xb+ya*yb)/sqrt((sqr(xa)+sqr(ya))*(sqr(xb)+sqr(yb)))); Form1.Caption:=FloatToStr(a); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Canvas.Ellipse(100,100,300,300); Canvas.MoveTo(200,200); Canvas.LineTo(300,200); Timer1.Enabled:=false; end; end. |
Сообщ.
#6
,
|
|
|
я там выложил свой исходник посмотри плиз...
|
Сообщ.
#7
,
|
|
|
Всё правильно, должно работать, осталось угол в градусы перевести для красоты.
|
Сообщ.
#8
,
|
|
|
А я вижу только одну ситуацию возможного обрушения
![]() Все же подозреваю, что "не работает" связано или с тем, что автор ожидал увидеть угол в градусах, или что автор вообще хотел получить угол в диапазоне от 0 до 360 градусов, а не 0-180 градусов. Впору писать алгоритм расшифровывания мыслей авторов ![]() |
Сообщ.
#9
,
|
|
|
Вот еще вариант
dx1 = x1 - x2 dy1 = y1 - y2 dx2 = x3 - x2 dy2 = y3 - y2 a = dx1*dy2 - dy1*dx2 b = dx1*dx2 + dy1*dy2 θ = arctan (a/b) или лучше (при наличии нужной функции) θ = atan2 (a, b) Второй вариант дает угол в диапазоне ±π Со знаком только надо разобраться |
Сообщ.
#10
,
|
|
|
Цитата v1m @ задано 2 отрезка (х1,у1)-(х2,у2) и (х2,у2)-(х3,у3) у этих отрезков есть 1 общая точка. и как найти угол? один из вариантов найти проходящие через отрезки прямые и найти угол между ними ... ![]() |
![]() |
|
|
сор что не написал что не работает))))
я понял как перевести это в градусы ![]() ток у меня максимально 180 а не 360 перевожу так Градусы = Радианы * 180 / pi |
Сообщ.
#12
,
|
|
|
не ты меня не так понял ну это уже неважно)))
я уже сам все решил))) спс за формулу))) ![]() |