Quiero rotar un CGPoint en la pantalla dependiendo del ángulo y la rotación está anclada en otro punto. Me preguntaba ¿cuál es la forma más eficiente de hacer esto?¿Cuál es la mejor manera de rotar un CGPoint en una cuadrícula?
Respuesta
También puede utilizar lo siguiente:
rotatedPoint = CGPointApplyAffineTransform(initialPoint, CGAffineTransformMakeRotation(angle));
EDIT: para llevar a cabo la rotación alrededor del punto a medida que usted debe hacer como Adán describió en su respuesta. Usando CGAffineTransform debe verse algo así como:
CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(customCenter.x, customCenter.y);
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(angle);
CGAffineTransform customRotation = CGAffineTransformConcat(CGAffineTransformConcat(CGAffineTransformInvert(translateTransform), rotationTransform), translateTransform);
rotatedPoint = CGPointApplyAffineTransform(initialPoint, customRotation);
Utilice un 2D rotation matrix. Si desea girar un punto en sentido antihorario alrededor del origen en un ángulo de angle
, entonces usted podría hacer esto:
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 desea girar alrededor de un punto que no sea el origen, que tendrá que restar primero el centro de rotación de su punto, rótelo usando lo anterior, y luego vuelva a agregarlo en el centro de rotación (esto se llama conjugación en la teoría de la matriz).
Adam, salvaste mi vida con la explicación sobre la conjugación. Gracias :) –
Utilice un CGAffineTransform.
También puede dejar que Core Animation lo haga por usted. Echar un vistazo a documentos de Apple sobre la geometría de capa y se transforma en el Core Animation Programming Guide
Todo lo que tiene que hacer es configurar el Anchorpoint de la capa y luego se puede aplicar la transformación con algo como esto:
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.z"];
[rotationAnimation setFromValue:DegreesToNumber(0)];
[rotationAnimation setToValue:DegreesToNumber(360)];
DegreesToNumber convierte grados a radianes y devuelve una representación NSNumber.
No estoy seguro de lo que está intentando hacer exactamente, pero a menudo Core Animation es una gran opción para las visualizaciones.
Usando Vladimir’s answer, a continuación es la Swift 3 respuesta:
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. ¿Cuál es la mejor manera de mostrar ASCII en una cuadrícula con paneles usando Java?
- 2. ¿La mejor manera de rotar una imagen usando SDL?
- 3. Cuál es la mejor manera de rotar registros para la aplicación de rieles
- 4. Rotar imágenes en android. ¿Hay una mejor manera?
- 5. ¿Cuál es la mejor manera de declarar una variable global?
- 6. Cuál es la mejor manera de autorizar una llave USB
- 7. ¿Cuál es la mejor manera de analizar una gramática simple?
- 8. ¿Cuál es la mejor manera de deducir una mesa?
- 9. ¿Cuál es la mejor manera de construir una NSCompoundPredicate compleja?
- 10. ¿Cuál es la mejor manera de incrementar una enumeración?
- 11. ¿Cuál es la mejor manera de perfilar una aplicación Sinatra?
- 12. ¿Cuál es la mejor manera de barajar un NSMutableArray?
- 13. ¿Cuál es la mejor manera de implementar un "temporizador"?
- 14. ¿Cuál es la mejor manera de atrapar una excepción IllegalArgumentException
- 15. ¿cuál es la mejor manera de verificar una matriz vacía?
- 16. ¿Cuál es la mejor manera de probar un procedimiento almacenado?
- 17. ¿Cuál es la mejor manera de probar un RedirectToAction?
- 18. ¿Cuál es la mejor manera de implementar una aplicación Pylons?
- 19. ¿Cuál es la mejor manera de copiar una lista?
- 20. ¿Cuál es la mejor manera de inicializar un frijol?
- 21. ¿Cuál es la mejor manera de dibujar en la consola?
- 22. ¿Cuál es la mejor manera de vaciar un directorio?
- 23. ¿Cuál es la mejor manera de determinar un bucle invariante?
- 24. CSS: ¿Cuál es la mejor manera de crear una grilla de Sudoku de 9x9?
- 25. ¿Cuál es una buena manera de rotar una matriz de píxeles?
- 26. ¿Cuál es la mejor manera de dividir una cadena por un delimitador de manera funcional?
- 27. ¿Cuál es la mejor manera de hacer bucles en JavaScript
- 28. ¿Cuál es la mejor manera de migrar datos en django
- 29. ¿Cuál es la mejor manera de recortar() en javascript
- 30. ¿Cuál es la mejor manera de manejar FBO en OpenGL?
¿Quiere decir que desea girar alrededor de un punto algo? – Jasarien
Sí, obviamente desde un punto de origen. – Frank