Calculer la distance entre deux CGPoints
j'ai besoin de calculer la distance entre deux CGPoint
s. J'ai appelé cette et cette, mais je ne l'obtenez pas.
- La Distance est une valeur scalaire, pas un point.
- Qu'entendez-vous par "distance dans CGPoint"? Un point représente un infiniment petit emplacement. Une distance ne peut pas être mesurée en points. Il y a l'infini de points entre deux points.
Vous devez vous connecter pour publier un commentaire.
Bien, avec des trucs à votre référence trop où est le code complet:
La distance est la distance variable.
Ce qui se passe ici:
Vous ne pouvez pas vraiment faire une CGPoint la distance, la distance n'est pas un x et la composante y. Il est à seulement 1 nombre.
Si vous pensez que CGPoint est une unité de mesure (par exemple les pieds est une unité de mesure), il ne l'est pas.
J'ai dû le faire à la main 10 000 fois alors j'ai écrit une fonction pour ça et il coincé dans ma bibliothèque personnelle que j'ai toujours de vidage au début d'un nouveau programme donc j'oublie ce n'est pas canon.
donc, vous l'appelez comme ça (dites que vous voulez savoir dans quelle mesure vous avez déplacé votre doigt):
Ceci est utile dans les fonctions de déplacement ainsi que pour la vérification de points dans un menu déroulant:
Ensemble "isItATap" vrai dans touchesBegan, mettre ci-dessus en touchesMoved, alors vous savez que le joueur lui a son doigt trop loin pour le toucher pour être un "robinet", de sorte que vous pouvez ne PAS sélectionner l'objet que le joueur touché et au lieu de défilement de l'objet autour de la.
Comme pour l'échelle, qui devraient être basées sur si vous avez ou non affichage de la rétine, ainsi que la taille d'un appareil, vous êtes sur (division par 2 de l'affichage retina depuis une distance de 5 "points" sur un écran classique comme le doigt de l'utilisateur se sent, il viendra comme 10 "pixels" sur un écran retina écran, puisque chaque point est de 4 pixels, donc, vous allez retrouver avec une situation où le joueur a un moment très dur en tapant sur l'écran retina (qui est une commune de la surveillance)
return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p2.y,2));
Je suis sûr que cela doit avoir été;return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2));
func distanceBetween(point p1:CGPoint, andPoint p2:CGPoint) -> CGFloat { return sqrt(pow((p2.x - p1.x), 2) + pow((p2.y - p1.y), 2)) }
Sonne comme vous voudrez probablement le vecteur de p1 à p2 (ou différence) plutôt que de la distance.
Réponse Courte
Plus Explination
Si vous avez deux points
p1
etp2
il est évidemment facile de trouver la différence entre leurheight
etwidth
(par exempleABS(p1.x - p2.x)
), mais de trouver une représentation fidèle de leur distance que vous voulez vraiment l'hypothénuse (H
ci-dessous).Heureusement, il y a un construit en macro:
hypotf
(ouhypot
pourdoubles
):(original référence)
Dans Swift, vous pouvez ajouter une extension à CGPoint:
et de l'utiliser comme ceci:
seulement cela...
où p1 et p2 sont des objets de CGPoint
Swift 4, Swift 3 solution