jeudi 26 janvier 2012

Snippets Math un couple de plus pour les graphiques 2D

Chaque programmeur a une collection de bibliothèques à usage général et des classes qui leur réutilisation. J'ai une collection assez vaste de l'Objective-C à partir des extraits au cours des années. J'ai régulièrement dépoussiérer d'eux et de les utiliser dans les applications iPhone. Voici celle que j'ai creusé il ya quelques semaines pour l'un des exemples de projets dans le book.

Ces trois fonctions sont utiles lorsque vous faites des graphiques 2D, soit en utilisant Graphics Quartz / Core ou Open GL (mais n'oubliez pas de retourner l'axe Y pour les seconds). La première fonction sera de retour la distance entre deux points sur un plan en 2 dimensions, le second vous donnera l'angle absolu d'une ligne formée par deux points, et le troisième sera de retour l'angle entre deux lignes,


#include "CGPointUtils.h"
#include
#import "Constants.h"


CGFloat distanceBetweenPoints (CGPoint first, CGPoint second) {
CGFloat deltaX = second.x - first.x;
CGFloat deltaY = second.y - first.y;
return sqrt(deltaX*deltaX + deltaY*deltaY );
};
CGFloat angleBetweenPoints(CGPoint first, CGPoint second) {
CGFloat height = second.y - first.y;
CGFloat width = first.x - second.x;
CGFloat rads = atan(height/width);
return radiansToDegrees(rads);
//degs = degrees(atan((top - bottom)/(right - left)))
}
CGFloat angleBetweenLines(CGPoint line1Start, CGPoint line1End, CGPoint line2Start, CGPoint line2End) {

CGFloat a = line1End.x - line1Start.x;
CGFloat b = line1End.y - line1Start.y;
CGFloat c = line2End.x - line2Start.x;
CGFloat d = line2End.y - line2Start.y;

CGFloat rads = acos(((a*c) + (b*d)) / ((sqrt(a*a + b*b)) * (sqrt(c*c + d*d))));

return radiansToDegrees(rads);
}


Aucun commentaire: