【问题标题】:CGPoint rotation changes distance from originCGPoint 旋转改变与原点的距离
【发布时间】:2012-05-18 23:39:09
【问题描述】:

我想围绕另一个 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]];

谢谢

【问题讨论】:

    标签: iphone objective-c ios image-processing cgpoint


    【解决方案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

    如果这不能解决您的问题,请告诉我您是否需要其他任何东西!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 2016-11-25
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多