2013-04-08 12 views
9

Praca z C++ i OpenCVObliczanie kąta pomiędzy punktami

Próbuję obliczyć kąt między dwoma punktami ..... Mam płaszczyznę 2D ze zmieniającego się punktu środkowego z obwiedni, a teraz, gdy Punkt środkowy w klatce 1 zmienił swoje położenie w klatce 2, muszę znaleźć kąt tych dwóch punktów.

Oto przykład tego, co próbuję zrobić:

enter image description here

Czy ktoś może zaproponować sposób pracy to się .......? jakiś rodzaj rozwiązania matematycznego lub być może funkcja C++.

+8

Nie ma kąt pomiędzy dwoma punkty, tylko linia. Aby zdefiniować kąt, potrzebujesz dwóch linii. Gdzie jest druga linia? –

+0

Tak, gdzie jest kąt? To powiedziawszy, w zależności od tego, gdzie jest twój kąt, funkcja atan2() może być przydatna, ale musisz poprawić swoje pytanie/diagram, aby uzyskać konkretną odpowiedź. –

+4

W rzeczywistości przydałoby się, aby narysować kąt na obrazie. –

Odpowiedz

15

Zastosowanie Dot product:

v1.v2 = v1.x * v2.x + v1.y * v2.y 

v1.v2 = |v1| * |v2| * cos(theta) 
---------------------------------+ 
           | 
           +--> theta = acos(v1.v2/|v1|*|v2|) 

Kod próbka:

float angleBetween(const Point &v1, const Point &v2) 
{ 
    float len1 = sqrt(v1.x * v1.x + v1.y * v1.y); 
    float len2 = sqrt(v2.x * v2.x + v2.y * v2.y); 

    float dot = v1.x * v2.x + v1.y * v2.y; 

    float a = dot/(len1 * len2); 

    if (a >= 1.0) 
     return 0.0; 
    else if (a <= -1.0) 
     return PI; 
    else 
     return acos(a); // 0..PI 
} 

Oblicza kąt pomiędzy V1 i V2 pod obrazem

enter image description here

+0

Czy chciałbyś zdefiniować kąt, który tutaj zwrócisz? I możemy zobaczyć, czy pasuje do tego wymaganego przez @Tomazi –

+1

@ David właśnie zrobił, więc usuwam mój komentarz: zdjęcie mówi więcej niż słowa tutaj :) – Sjoerd

+0

Sprawdziłem film na youtube na Dot Produkt http://www.youtube.com/watch?v=WDdR5s0C4cY,..i zastanawiasz się, dlaczego a & b mają trzy parametry ..... Teraz w twoim przypadku v byłaby zmienna typu danych punktowych ....? – Tomazi

Powiązane problemy