Вращение CGPoint изменяет расстояние от начала координат

Я хочу повернуть CGPoint (красный прямоугольник) вокруг другого CGPoint (синий прямоугольник), но он меняет расстояние от начала координат (синий прямоугольник)... когда я даю 270 под углом, он создает точку прямо над началом, но когда я даю 90 как значение угла, оно спускается вниз по происхождению, НО ИЗМЕНЯЕТ РАССТОЯНИЕ ТАКЖЕ почти в три раза больше .... Я хочу сохранить одинаковое расстояние и хочу повернуть CGPoint вокруг другого. Пожалуйста, укажите любой подход к ротации cgpoints...

distance = 100;
angle = 270*M_PI/180;    
rotatedPoint.x = initialPoint.x+distance*cos(angle);
rotatedPoint.y = initialPoint.y+distance*sin(angle);
    //rotatedPoint.x = initialPoint.x+tan(angle);

[test setCenter:rotatedPoint];   
[test setBackgroundColor:[UIColor redColor]];

Спасибо


person Dani    schedule 18.05.2012    source источник


Ответы (1)


CGAffineTransform — удобный инструмент, когда дело доходит до поворота, перемещения и масштабирования. Чтобы убедиться, что точка повернута правильно, вы должны перевести ее в исходную точку, повернуть ее, а затем перевести обратно.

Чтобы завершить ваше преобразование, что-то вроде следующего должно помочь:

CGPoint pointToRotate = CGPointMake(30, 30);
float angleInRadians = DEGREES_TO_RADIANS(90);
CGPoint distanceFromOrigin = CGPointMake(0 - pointToRotate.x, 0 - pointToRotate.y);

CGAffineTransform translateToOrigin = CGAffineTransformMakeTranslation(distanceFromOrigin.x, distanceFromOrigin.y);
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(angleInRadians);
CGAffineTransform translateBackFromOrigin = CGAffineTransformInvert(translateToOrigin);

CGAffineTransform totalTransform = CGAffineTransformConcat(translateToOrigin, rotationTransform);
totalTransform = CGAffineTransformConcat(totalTransform, translateBackFromOrigin);

pointToRotate = CGPointApplyAffineTransform(pointToRotate, totalTransform);

А вот документация по CGAffineTransform, если вы хотите ознакомиться с ней подробнее: http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html

Пожалуйста, дайте мне знать, если вам нужно что-то еще, если это не решит вашу проблему!

person WendiKidd    schedule 19.05.2012