Na przykład GetAngle ((0,0), (100,0), (100,100)) = 90. Jak znaleźć kąt między 3 punktami 2D.Kąt między 3 wierzchołkami
Odpowiedz
Biorąc pod uwagę punkty A, B i C, chcesz kąt między AB a AC? Najpierw obliczyć wektory AB i AC - to tylko współrzędne B minus współrzędne A i podobnie dla AC. Weź dot product z dwóch wektorów. Jest to tylko iloczyn współrzędnych x plus iloczyn współrzędnych y wektorów. Podziel tę liczbę przez długość AB i ponownie przez długość AC. Wynik ten jest cosinusem kąta między dwoma wektorami, więc weź arccos() i już go masz.
pomocą iloczynu skalarnego:
(a,b,c) dot (d,e,f) = ad + be + bf
.
A dot B = length(A)*length(B)* cos(theta)
theta = arccos((A dot B)/(length(A)*length(B))
jest kąt między wektorami A i B.
To proste, jeśli masz podstawową wiedzę na temat algebry liniowej.
Wektor v (w sensie algebry liniowej, nie std :: wektor;)) jest krotką v = (x, y, z).
Normą jest długość wektora | v | = Sqrt (x x + y y + z z *)
Wewnętrzna dwóch wektorów V1 = (x1, y1, z1) i V2 = (x2, y2, Z2) jest V1 · V2 = x1 * x2 + Y1 * y2 + z1 * z2
kąt wektorów V1 i V2 a = acos (V1 · V2/(| V1 | * | V2 |))
Dzięki! Też to lubię :-) – jmasterx
problem z wykorzystaniem tylko Produktem o tej nazwie jest to, że jest niestabilny w pobliżu 0 lub 180 stopni - nachylenie acos() zbliża się do nieskończoności w pobliżu +/- 1,0, co spowoduje utratę precyzji.
Aby rozwiązać ten problem, można obliczyć produkt pseudo przekroju i użyć atan2(), w następujący sposób:
// given A, B, C are 2D points:
BA= B - A; CA= C - A // vector subtraction, to get vector between points
dot= BA.x * CA.x + BA.y * CA.y
pcross= BA.x * CA.y - BA.y * CA.x
angle= atan2(pcross, dot) // this should be the angle BAC, in radians
ten powinien być numerycznie wytrzymały, chyba że jeden z ramion kąta ma długość zerową.
Należy zauważyć, że pod tym kątem podany zostanie również podany kąt, w zależności od tego, czy BAC jest zgodny z ruchem wskazówek zegara, czy przeciwnie do ruchu wskazówek zegara; metoda acos() zawsze da ci dodatnią wartość. Oczywiście, jeśli chcesz tylko pozytywny kąt, możesz wziąć abs(angle)
; metoda atan2() będzie jeszcze bardziej niezawodna i prawdopodobnie szybsza.
- 1. Kąt między 3 punktami?
- 2. Znaleźć kąt między dwoma łożyskami
- 3. Kąt Matlab między dwoma punktami
- 4. Jaki jest właściwy sposób na znalezienie krawędzi między dwoma wierzchołkami?
- 5. Java: kąt determinacji między dwoma punktami
- 6. OpenCV: Oblicz kąt między kamerą a pikselem.
- 7. Odzyskaj kąt dodatni lub ujemny z 3 punktów
- 8. Jak obliczyć w kącie JavaScript między 3 punktami?
- 9. Nieprawidłowy kąt, zła strona obliczona
- 10. Jak obliczyć kąt między linią a osią poziomą?
- 11. Jak obliczyć Azymut (kąt na północ) między dwiema współrzędnymi WGS84
- 12. Oblicz kąt między dwoma punktami szerokości/długości geograficznej
- 13. Podpisany kąt między dwoma wektorami bez płaszczyzny odniesienia
- 14. Triangulacja punktów 3D z wierzchołkami K na twarz
- 15. Pie kąt początkowy układ
- 16. Oblicz kąt kliknięcia
- 17. Oblicz kąt 2 punktów
- 18. Jak obliczyć kąt wektora od pionu?
- 19. Przestrzeń między Bootstrap 3 przyciski
- 20. Programowo zmienny kąt nachylenia GradientDrawable
- 21. Oblicz kąt z transformacji macierzy
- 22. Kąt etykiety XAxis w MPAndroidChart
- 23. Jak obliczyć kąt z punktów?
- 24. Algorytm znaleźć łuk, jego centrum, promień i kąt daną 3 punkty
- 25. Różnice między JUnit 3 i JUnit 4
- 26. Komunikacja między C++ i actionscript 3
- 27. Silverlight 3 różne zachowania między przeglądarkami
- 28. C# Silverlight 3 - Programowo nawiguj między stronami?
- 29. Znajdź, czy kąt jest w zakresie X stopni od innego
- 30. CABasicAnimation jak uzyskać bieżący kąt obrotu
Gdyby to było miejsce matematyczne, miałbym ochotę oznaczyć to zadanie domowe. ;) To jest prosta trygonometria. http://en.wikipedia.org/wiki/ Trygonometria#Common_formulaty – Cogwheel
Nie, to dla osobistego projektu – jmasterx