Géométrie> Calcul de l'angle horaire de deux vecteurs> Lien: implémentation python / implémentation C

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

Calculez l'angle entre un vecteur et un autre. L'angle est dans le sens des aiguilles d'une montre.

Vous trouverez ci-dessous l'implémentation de python. http://stackoverflow.com/questions/31735499/calculate-angle-clockwise-between-two-points

déterminant sort. Ad-bc pour 2x2. Pour 3x3, utilisez la formule de Saras. http://www.mathsisfun.com/algebra/matrix-determinant.html


J'ai fait de l'implémentation python ci-dessus l'implémentation C dont j'ai besoin. La dénomination est tout à fait appropriée.

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;
}

résultat


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

Dans l'implémentation python ci-dessus (et l'implémentation C basée sur celle-ci), si deux vecteurs se chevauchent, l'angle sera de 360 degrés au lieu de 0 degrés </ font> Cette zone doit être corrigée le cas échéant.

Recommended Posts

Géométrie> Calcul de l'angle horaire de deux vecteurs> Lien: implémentation python / implémentation C
Implémentation Python du filtre à particules
Implémentation du tri rapide en Python
Comparaison de la vitesse de calcul en implémentant python mpmath (calcul de précision arbitraire) (Note)
Implémentation Python du filtre à particules auto-organisateur
Implémentation du jeu de vie en Python
Implémentation des notifications de bureau à l'aide de Python
implémentation de c / c ++> RingBuffer (N marges)
Implémentation Python de l'arborescence de segments non récursive
Implémentation de Light CNN (Python Keras)
Implémentation de la méthode Dyxtra par python
[Python] Calcul du coefficient kappa (k)
[Unity (C #), Python] Mémo d'étude de communication API ③ Implémentation de la fonction de connexion simplifiée