2013-04-08 15 views
9

Lavorare con C++ e OpenCVCalcolando l'angolo tra Punti

Sto cercando di calcolare un angolo tra due punti ..... Ho un piano 2D con un cambiamento punto centrale di un riquadro, Ora, se il il punto centrale nel frame 1 ha cambiato la sua posizione nel frame 2 ho bisogno di trovare l'angolo di questi due punti.

Ecco l'esempio di quello che sto cercando di fare:

enter image description here

qualcuno può suggerire un modo di lavorare questo fuori .......? una sorta di soluzione matematica o forse una funzione C++.

+8

Non c'è angolo tra due punti, solo una linea. Hai bisogno di due linee per definire un angolo. Dov'è l'altra linea? –

+0

Sì, dov'è l'angolo? Detto questo, a seconda di dove si trova l'angolo, potrebbe essere utile anche la funzione atan2(), ma è necessario migliorare la domanda/diagramma per ottenere una risposta definitiva. –

+4

In effetti, sarebbe utile se si potesse disegnare l'angolo sull'immagine. –

risposta

15

Uso Dot product:

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

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

Un codice di esempio è:

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 
} 

Calcola angolo tra v1 e v2 come sotto immagine

enter image description here

+0

Ti piacerebbe definire l'angolo che viene restituito qui? E possiamo vedere se corrisponde a quello richiesto da @Tomazi –

+1

@David Ha appena fatto, quindi sto rimuovendo il mio commento: una foto dice più delle parole qui :) – Sjoerd

+0

Ho cercato un video su youtube su Dot Product http://www.youtube.com/watch?v=WDdR5s0C4cY,......e ci chiediamo perché a & b hanno entrambi tre parametri ..... Ora nel tuo caso v sarebbe variabile Tipo di dati punto ....? – Tomazi

Problemi correlati