2009-11-28 4 views
0

J'essaie de détecter si un rectangle ou un cercle contient un point. Ce n'est pas si difficile, mais je veux savoir s'il existe une méthode intégrée dans l'objectif c pour cela? Merci!Formes et points Objective C

Répondre

2

Pour les rectangles (comme NSRect s) il y a la fonction Fondation NSPointInRect():

NSPoint somePoint = //The point you want to test for 
NSRect someRect = //The rectangle you want to test in 

BOOL rectContainsPoint = NSPointInRect(somePoint, someRect); 

Pour les cercles, on peut utiliser la méthode d'instance NSBezierPathcontainsPoint:

NSBezierPath *circlePath = //Assume this is instantiated to a circle path 
NSPoint somePoint = //The point you want to test for 

BOOL circleContainsPoint = [circlePath containsPoint:somePoint]; 

même si vous avez un chemin rectangulaire vous pouvez utiliser containsPoint: pour tester si le point est dans ce rectangle.

Edit: Comme NSResponder a souligné, la création d'un objet chemin complet ne peut pas toujours être la méthode la plus efficace - si vous avez déjà des chemins de cercle pour une sorte de dessin ou quelque chose, oui, mais il y a probablement d'autres plus efficaces façons de le faire. Cependant, l'utilisation de chemins est une méthode intégrée pour le faire.

+2

Je ne créerais pas de chemin pour tester un point dans un cercle. Vous pouvez simplement vérifier la distance entre le point et le centre. – NSResponder

+0

Ouais en termes d'efficacité, à moins que vous ne travailliez déjà avec un objet 'NSBezierPath', vous avez probablement raison, même si' Tojas' demandait des méthodes intégrées. Correction de la réponse quand même. –