Порахувати кут по 3 точкам

Є три точки задані координатами. Як порахувати кут між напрямками перша - друга, перша - третя точки.

тобі дано трикутник, який легко обчислюється

Судячи за анкетою 22 роки вже. Повинен знати. Або 15 років на другий рік залишали? Чи не пам'ятаєш і немає можливості зиркнуть в підручник - намалюй на папірці, обчислювальні сам.

Через твір векторів
a * b = mod (a) * mod (b) * cos (a ^ b)
з cos - отримаєш кут.

Скалярний чогось векторів (то-ли сума, то-ли твір, давно це було, можна вивести, але в лом).
З.И. Виводиться: через визначення синуса / косинуса, а далі різниця двох кутів.

> 22 року вже. Повинен знати
- а мені 28 скоро, забув все геть, хоча - знадобиться - виведу.

Затикаючи в тому, що кут потрібен від -180 до 180 градусів,
наскільки я розумію, по теоремі косинусів отримаємо від 0 до 180 - тільки модуль.
Звичайно, можна знак окремо порахувати, але повинна ж бути якась проста формула для завдання класу для 9.

Мені не потрібні трикутники. Я хочу реалізувати стандартний алгоритм перевірки приналежності точки багатокутника.
Наскільки я розумію (якщо допустити що фігура без самоперетинів) потрібно пройти шлях від першої точки через все і в неї ж повернутися, підсумовуючи при цьому кути.
Якщо вийде 0 - точка поза фігури, 360 градусів - внутр фігури.
Але, по-моєму, кути потрібно вважати повні від -180 до 180 градусів.


> - а мені 28 скоро, забув все геть, хоча - знадобиться
> - виведу.

В цьому і сенс. Я теж не пам'ятаю. Але намалюю на папірці, приведу до прямокутного трикутника, вважатиму косинус, ну і арккосинус.
Головне знати дві речі - прінцип і де що в якому довіднику лежить :).
Знак кута можна отримати проаналізувавши різницю координат точок.

стандартний алгоритм перевірки приналежності точки багатокутника
- це паперовий стандарт, нормальні люди площі вважають.

простіше знайти кількість перетинів
1 будуємо відрізок виходить з точки (яку перевіряємо на внутрішність) і перпендикуляр однієї зі сторін, що описує багатокутник, квадрата.
2 підраховуємо кількість перетинів цього відрізка зі сторонами багатокутника.
3 якщо парне то крапка не потрапляє в багатокутник і навпаки

проходження відрізка через кути багатокутника (і в разі самопересегающегося точки перетину) збільшуємо лічильник на 2.

Я тільки такий алгоритм знайшов. А навіщо вважати площі і що це дасть? Якщо не складно, кинь якусь посилання про такий алгоритм.

фігура опукла або взагалі

Фігура не обов'язково опукла. Але для алгоритму підсумовування кутів це неважливо.

Алгоритм підрахунку перетинів теж стандартний.
Я ці два алгоритму (сума кутів і кількість перетинів) в книжці "Інтерактивна машинна графіка" 1981 р.в. знайшов.

По-перше, розглянути прямі, що містять сторони трикутника. Якщо дана точка знаходиться по ту ж сторону від прямої, що і третя вершина, і це виконується одночасно для всіх трьох прямих, то вона розташована всередині трикутника.

По-друге, якщо з'єднати цю точку з вершинами трикутника, розглянути суму площ новостворених трьох трикутників, і ця сума дорівнює площі вихідного трикутника (зрозуміло, в межах заданої точності), то задана точка знаходиться всередині трикутника.

У запропонованій нижче програмі реалізовантретій підхід, заснований на тому, що якщо розглянути суму кутів при вершині, утвореної досліджуваної точкою і вершинами трикутника, і якщо ця сума дорівнює 360, то точка знаходиться всередині трикутника.
10 REM ТРЕУГОЛЬНИК
20 DIM X (3), Y (3)
30 FOR I = 1 TO 3
40 INPUT X (I), Y (I)
50 NEXT I
60 INPUT A, B
70 S = Y (1) -B
80 T = X (1) -A
90 GOSUB 400
100 P = F
110 S = Y (3) -B
120 T = X (3) -A
130 GOSUB 400
140 F = P-Q
150 IF ABS (F)> = 3.141593 THEN F = F-3.141593 * 2 * SGN (F)
160 Z = F
170 FOR I = 1 TO 2
180 S = Y (I) -B
190 T = X (I) -A
200 GOSUB 400
210 P = F
220 S = Y (I + 1) -B
230 T = X (I + 1) -A
240 GOSUB 400
250 Q = F
260 D = P-Q
270 IF ABS (D)> = 3.141593 THEN D = D-3.141593 * 2 * SGN (D)
280 Z = Z + D
290 NEXT I
300 IF ABS (Z)<3.141593*2 THEN PRINT"ВНЕ"
310 IF ABS (Z)> = 3.141593 * 2 THEN PRINT "ВСЕРЕДИНІ"
320 END
400 IF S> 0 AND T> 0 THEN F = ATN (S / T)
410 IF S> 0 AND T<0 THEN F=ATN(S/T)+3.141593
420 IF S<0 AND T>0 THEN F = ATN (S / T) + 3.141593 * 2
430 IF S<0 AND T<0 THEN F=ATN(S/T)+3.141593
440 RETURN

але це дурниця, ось таке завдання

Кути трикутника АВС - суть засідки, з яких піонери Колян, Петруха і Васьок підглядають за закоханої парочкою. Відстань від Коляна до закоханої парочки 11 метрів, від Петрухи 9 метрів. На якій відстані від закоханої парочки знаходиться Васьок, якщо відомо, що від нього до Коляна 20 метрів, а до Петрухи 18?

Ех, робята - куди вас несе.
Перше, треба визначитися з тим що значить кут -10, наприклад. Це означає ввести орієнтацію. Або (ми ж в трехмерке?) Інакше - визначити векторний добуток. При векторному можна вибрати два напрямки - яке вибрали - то і визначає орієнтацію.
Потім вважаємо скалярка і векторне двох векторів.
З скалярка у нас два кута, знак векторкі і дасть потрібний. Все однако.
Але момент тонкий - поспішати не треба.

Від 9 до 27 метрів

> Від -180 до 180

На скільки я пам'ятаю геометрію кут в 180 дорівнює куту в -180.

я теж, це з нету, побачив і вчорашнє згадав, запостив.

а про Коляну з Петруха :), це жарт :)))

Схожі статті