Geometrie> Winkelberechnung zweier Vektoren im Uhrzeigersinn> Link: Python-Implementierung / C-Implementierung

Verwandte http://qiita.com/7of9/items/dd241297a7231485767d

Berechnen Sie den Winkel zwischen einem Vektor und einem anderen. Der Winkel ist im Uhrzeigersinn.

Unten finden Sie die Python-Implementierung. http://stackoverflow.com/questions/31735499/calculate-angle-clockwise-between-two-points

Determinante kommt heraus. Ad-bc für 2x2. Verwenden Sie für 3x3 die Saras-Formel. http://www.mathsisfun.com/algebra/matrix-determinant.html


Ich habe die obige Python-Implementierung zu der C-Implementierung gemacht, die ich brauche. Die Benennung ist durchaus angebracht.

http://ideone.com/CWu8Z1

#include <stdio.h>
#include <math.h>

float get_length(float vs[2])
{
	return sqrt( pow(vs[0],2) + pow(vs[1],2) );
}
float get_dot_product(float vs[2], float ws[2])
{
	return vs[0]*ws[0] + vs[1]*ws[1];	
}
float get_determinant(float vs[2], float ws[2])
{
	return vs[0]*ws[1] - vs[1]*ws[0];	
}
float get_inner_product(float vs[2], float ws[2])
{
	float cosx = get_dot_product(vs,ws);
	cosx = cosx / (get_length(vs) * get_length(ws));
	float rad = acos(cosx);
	return rad * 180.0 / acos(-1.0);
}
float get_angle_clockwise(float As[2], float Bs[2])
{
	float inner = get_inner_product(As, Bs);
	float det = get_determinant(As, Bs);
	if (det < 0.0) {
		return inner;
	} else {
		return 360.0 - inner;
	}
}

float get_angle_clockwise_wrapper(float x1, float x2, float y1, float y2)
{
	float Xs[2];
	float Ys[2];
	
	Xs[0] = x1;
	Xs[1] = x2;
	Ys[0] = y1;
	Ys[1] = y2;
	return get_angle_clockwise(Xs, Ys);
}

int main(void) {
	printf("%f \n", get_angle_clockwise_wrapper(0,1, 1,0));
	printf("%f \n", get_angle_clockwise_wrapper(1,0, 0,1));
	printf("%f \n", get_angle_clockwise_wrapper(0,1, 1,1));

	return 0;
}

Ergebnis


Success	time: 0 memory: 2156 signal:0
90.000000 
270.000000 
45.000000 

Wenn sich in der obigen Python-Implementierung (und der darauf basierenden C-Implementierung) zwei Vektoren überlappen, beträgt der Winkel 360 Grad anstelle von 0 Grad </ font> Dieser Bereich muss entsprechend korrigiert werden.

Recommended Posts

Geometrie> Winkelberechnung zweier Vektoren im Uhrzeigersinn> Link: Python-Implementierung / C-Implementierung
Python-Implementierung des Partikelfilters
Implementierung der schnellen Sortierung in Python
Vergleich der Berechnungsgeschwindigkeit durch Implementierung von Python mpmath (willkürliche Genauigkeitsberechnung) (Hinweis)
Python-Implementierung eines selbstorganisierenden Partikelfilters
Implementierung eines Lebensspiels in Python
Implementierung von Desktop-Benachrichtigungen mit Python
Implementierung von c / c ++> RingBuffer (N Ränder)
Python-Implementierung eines nicht rekursiven Segmentbaums
Implementierung von Light CNN (Python Keras)
Implementierung der Dyxtra-Methode durch Python
[Python] Berechnung des Kappa (k) -Koeffizienten
[Unity (C #), Python] Memo zur API-Kommunikationsstudie ③ Implementierung einer vereinfachten Anmeldefunktion