87 votes

Comment trouver la distance entre deux CG points?

Quand on touche avec les deux doigts dans la UIScrollView, nous obtenons deux CG points. Je veux trouver la distane entre eux. Alors, comme je ne l'pincée(à l'intérieur ou à l'extérieur). Ensuite, nous allons de nouveau obtenir deux points. Puis, après la recherche de la distance entre ces deux points , je tiens à décider si j'ai pincé dans ou à l'extérieur. Si j'ai pinced dans, sûrement la nouvelle distance sera moindre, et vice-versa.

Mais ne sais pas comment trouver une mesure précise de la distance entre 2 points, de sorte que je puisse comparer? Quelqu'un a une idée de comment faire cela?

192voto

lucius Points 5239

Vous pouvez utiliser l' hypot() ou hypotf() fonction pour calculer l'hypoténuse. Étant donné deux points de p1 et p2:

CGFloat distance = hypotf(p1.x - p2.x, p1.y - p2.y);

Et c'est tout.

130voto

Ole Begemann Points 85798

Distance entre p1 et p2:

CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));

Contexte: le théorème de Pythagore

Edit: si vous avez seulement besoin de calculer si la distance entre les points augmente ou diminue, vous pouvez omettre la sqrt() qui va le rendre un peu plus rapide.

12voto

haawa Points 903
-(float)distanceFrom:(CGPoint)point1 to:(CGPoint)point2
{
CGFloat xDist = (point2.x - point1.x);
CGFloat yDist = (point2.y - point1.y);
return sqrt((xDist * xDist) + (yDist * yDist));
}

Si vous utilisez cocos2d

float distance = ccpDistance(point1, point2);

3voto

redux Points 473

J'ai écrit cela, je l'utilise beaucoup:

- (float) distanceBetween : (CGPoint) p1 and: (CGPoint) p2
{
    return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2));
}

Appel comme ceci:

float distanceMoved = [self distanceBetween touchStart and: touchEnd];

J'utilise normalement cocos2d, mais je continue d'utiliser mon propre fonction pour certaines choses, parce que quand j'étais en apprentissage, j'ai écrit un tas de mes propres fonctions pour des choses simples plutôt que la recherche du "officiel" des fonctions d'ordre supérieur, et en outre, je ne suis pas un grand fan de fonctions(vars, vars), je préfère [auto fonctions de vars et de: vars]

0voto

user2425159 Points 1

Si vous voulez trouver l'absolu de la valeur de distance entre deux points, alors vous pouvez utiliser (pour Cocos2d):

float distance = abs(ccpDistance(point1, point2));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X