• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obliczanie kąta pomiędzy trzema punktami - Zadanie Autobus OIG

Object Storage Arubacloud
0 głosów
412 wizyt
pytanie zadane 21 lutego 2023 w Algorytmy przez pasjonat_algorytmiki Pasjonat (19,540 p.)
edycja 21 lutego 2023 przez pasjonat_algorytmiki

Mam problem z takim zadaniem: https://szkopul.edu.pl/problemset/problem/mVAfHT3mw6IurviIcUJCnivk/site/?key=statement

Wydaje się nie być ono jakieś bardzo trudne, poprostu puszczam Dijkstrę, ale cały problem polega na tym, że droga pomiędzy dwoma punktami nie może być > 90 stopni. I mam problem, jak obliczyć kąt pomiędy 3 odcinkami, w sensie nawet nie muszę go liczyć, ale sprawdzić czy jest <= 90 stopni.

Myślałem, żeby narysować ala równoległobok i spuścić wysokość i podstawić do wzoru na pole trójkąta z sinusem, i też porównać do pola trójkąta z wzoru Herona. Nwm czy to jest dobre i wgl bardzo dużo wyliczeń, a może da się jakoś łatwiej to wyliczyć.

Rysunek poglądowy co chcę wyliczyć, znając współrzędne 3 punktów:

Jak będę wiedział, jak wyliczyć taki kąt / czy jest <= 90 stopni, znając współrzędne P1, P2, P3, to reszta zadania wydaje się nie być trudna. Puszczam zwykłą Dijkstrę.

komentarz 21 lutego 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Wiem, że nie jest to jakiś trudny problem, ale jakimś orłem z geometri to (jeszcze!) narazie nie jestem.
komentarz 21 lutego 2023 przez Oscar Nałogowiec (29,320 p.)
Klasyczne rozwiązanie trójkąta, są do tego gotowe wzory, ale można też na piechote dzieląc dany trójkąt na dwa trójkąty prostokątne.
komentarz 21 lutego 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)

@Oscar, 

Ukryłem ten mój przedchwilą komentarz, bo było to lekkie nieporozumienie.

Ale w sensie; jak podzielę to na 2 trójkąty prostokątne, to P = a * h / 2, P wylicze z wzoru Herona, co dalej?

komentarz 21 lutego 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Dobra, jestem kompletnym debilem. Poprostu P = A * H / 2, z wzoru Herona obliczam pole, A znam więc elo, drugi bok liczę z Pitagorasa, więc mam sinusa i koniec. Sory za tak głupie pytanie i stracony czas.

1 odpowiedź

+2 głosów
odpowiedź 22 lutego 2023 przez Oscar Nałogowiec (29,320 p.)
wybrane 22 lutego 2023 przez pasjonat_algorytmiki
 
Najlepsza

Można też obliczyć sam kąt - jeśli wyznaczyć równania prostych P1-P2 i P2-P3 to współczynnik a we wzorze to y=ax+b to tangens kąta nachylania prostej - różnica kątów nachylenia oby prostych da szukany kąt. Oczywiście ten wzór wysiada dla prostych pionowych - działa wtedy bardziej uniwersalne równanie prostej aX+bY+c = 0, i a/b to ten tangens. W bibliotekach różnych języków jest funkcja atan2(y,x) - to taki odpowiednik arcus tangens dla przypadku gdy dany jest odcinkek <X, Y> i to działa nawet gdy Y=0 i działa w całym zakresie 0-360 stopni.

W sumie dostaje się wzór postaci atan2(p1.y-p2.y, p1.x-p2.x)-atan2(p2.y-p3.y, p2.x-p3.x). Być może kolejność odejmowania należy dobrać. Oczywiście wyjdzie w radianach.

1
komentarz 22 lutego 2023 przez manjaro Nałogowiec (37,390 p.)
Też tak  podszedłbym do tego problemu.
komentarz 22 lutego 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)

@Oscar, 

to wsumie, będzie nawet lepsze niż moje, bo ja mam dużo wyliczeń, a w tym to poprostu kilka linijek i już.

komentarz 22 lutego 2023 przez Whiskey_Taster Pasjonat (15,610 p.)
Panowie, wystarczy utworzyć dwa wektory i skorzystać z iloczynu skalarnego :)

Podobne pytania

0 głosów
0 odpowiedzi 448 wizyt
pytanie zadane 27 listopada 2016 w Algorytmy przez ProgramistaStepek Nałogowiec (27,020 p.)
0 głosów
3 odpowiedzi 2,890 wizyt
pytanie zadane 6 lipca 2017 w Python przez DODO Bywalec (2,950 p.)
0 głosów
1 odpowiedź 1,084 wizyt
pytanie zadane 15 kwietnia 2017 w JavaScript przez Neespa Początkujący (300 p.)

92,575 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...