Je veux faire pivoter un CGPoint sur l'écran en fonction de l'angle et la rotation est ancrée sur un autre point. Se demandait quel est le moyen le plus efficace de le faire?Quelle est la meilleure façon de faire pivoter un CGPoint sur une grille?
Répondre
Vous pouvez également l'utiliser:
rotatedPoint = CGPointApplyAffineTransform(initialPoint, CGAffineTransformMakeRotation(angle));
EDIT: pour effectuer une rotation autour du point personnalisé, vous devez faire comme Adam décrit dans sa réponse. En utilisant CGAffineTransform, il doit ressembler à quelque chose comme:
CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(customCenter.x, customCenter.y);
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(angle);
CGAffineTransform customRotation = CGAffineTransformConcat(CGAffineTransformConcat(CGAffineTransformInvert(translateTransform), rotationTransform), translateTransform);
rotatedPoint = CGPointApplyAffineTransform(initialPoint, customRotation);
cela gère-t-il la rotation sur un autre point de côté sur lui-même? – Frank
vient de faire quelques changements sur ce code, CGAffineTransformMakeTransation est CGAffineTransformMakeTranslation, faute de frappe mineure. et pour l'angle, il faut que ce soit radian mais à part ça cela fonctionne thx! – Frank
Utilisez un 2D rotation matrix. Si vous souhaitez faire pivoter un point antihoraire sur l'origine d'un angle de angle
, alors vous feriez ceci:
CGPoint RotatePointAboutOrigin(CGPoint point, float angle)
{
float s = sinf(angle);
float c = cosf(angle);
return CGPointMake(c * point.x - s * point.y, s * point.x + c * point.y);
}
Si vous voulez tourner autour d'un point autre que l'origine, vous devez d'abord Soustraire le centre de rotation à partir de votre point, faites-le pivoter en utilisant ce qui précède, puis rajoutez au centre de rotation (c'est ce qu'on appelle la conjugaison en théorie des matrices).
Adam, Tu m'as sauvé la vie avec l'explication de la conjugaison. Merci :) –
Utilisez un CGAffineTransform.
Vous pouvez également laisser Core Animation le faire pour vous. Jetez un coup d'oeil aux documents d'Apple sur la géométrie de la couche et se transforme dans le Core Animation Programming Guide
Tout ce que vous devez faire est de régler la Anchorpoint de la couche et vous pouvez appliquer la transformation avec quelque chose comme ceci:
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.z"];
[rotationAnimation setFromValue:DegreesToNumber(0)];
[rotationAnimation setToValue:DegreesToNumber(360)];
DegreesToNumber convertit les degrés en radians et renvoie une représentation NSNumber.
Je ne suis pas sûr de ce que vous essayez de faire exactement, mais souvent Core Animation est un excellent choix pour les visualisations.
En utilisant Vladimir’s answer, ci-dessous est le Swift 3 Réponse:
let initialPoint = CGPoint(x: 100, y: 100) // the point you want to rotate
let translateTransform = CGAffineTransform(translationX: initialPoint.x, y: initialPoint.y)
let rotationTransform = CGAffineTransform(rotationAngle: angle)
let customRotation = (rotationTransform.concatenating(translateTransform.inverted())).concatenating(translateTransform)
rotatedPoint = initialPoint.applying(customRotation)
- 1. Quelle est la meilleure façon de faire ce programme Java?
- 2. Quelle est la meilleure façon d'implémenter une grille 2D de boutons radio?
- 3. Quelle est la meilleure façon de faire une recherche dans un fichier volumineux?
- 4. Quelle est la meilleure façon de faire une sous-chaîne dans un fichier batch?
- 5. La meilleure façon de construire une grille 10x10 de UIButtons?
- 6. Quelle est la meilleure façon de déboguer un Oracle SP?
- 7. Quelle est la meilleure façon de rafraîchir un indice Nutch?
- 8. Quelle est la meilleure façon de vider un répertoire?
- 9. La meilleure façon de faire pivoter une image en utilisant SDL?
- 10. Quelle est la meilleure façon de déboguer un écrasement explorer.exe?
- 11. Quelle est la meilleure façon de localiser un IEnumerable?
- 12. quelle est la meilleure façon de marquer un texte?
- 13. Quelle est la meilleure façon de faire une application de cartographie pour l'iPhone
- 14. Quelle est la meilleure façon de structurer un projet?
- 15. Quelle est la meilleure façon d'appliquer une ombre portée?
- 16. Quelle est la meilleure façon de chiffrer un clob?
- 17. Quelle est la meilleure façon d'effacer un tableau de chaînes?
- 18. Quelle est la meilleure façon d'implémenter un délai AJAX?
- 19. Quelle est la meilleure façon d'échantillonner/profiler une application PyObjC?
- 20. Quelle est la meilleure façon d'écrire dans un fichier Ruby?
- 21. Quelle est la meilleure façon d'enregistrer un RichTextFile en C#?
- 22. Quelle est la meilleure façon de faire un simple parent-enfant déroulant en Javascript pur
- 23. Comment faire un cercle sur une grille?
- 24. Quelle est la meilleure façon de mettre en évidence un champ obligatoire sur un formulaire Web?
- 25. Quelle est la meilleure façon d'initialiser une application?
- 26. Quelle est la meilleure façon de faire glisser un panneau dans WPF?
- 27. Quelle est la meilleure façon d'initialiser un tableau sur un tableau de longueur fixe? (C++/CLI)
- 28. Quelle est la meilleure façon de faire une console avec DHTML?
- 29. Quelle est la meilleure façon de faire certaines pages dans asp.net exigent une connexion?
- 30. Quelle est la meilleure façon de faire la manipulation de champ de bits en Python?
Voulez-vous dire que vous voulez faire tourner quelque chose autour d'un point? – Jasarien
Oui évidemment d'un point d'origine. – Frank