【问题标题】:Relationship Between Skew and Angle - CGAffineTransform倾斜和角度之间的关系 - CGAffineTransform
【发布时间】:2012-07-25 15:01:10
【问题描述】:

我正在开发一个 iPad 应用程序,该应用程序允许用户用手指画一条线,然后使用该线的起点和终点我计算该线相对于 iPad 的 x/y 平面的角度.

我的问题是我想使用绘制线的角度来设置我在当前上下文中绘制的图像的倾斜。

这是我的 drawRect 方法的相关代码:

         CGSize size =  CGSizeMake(1024, 768);
         UIGraphicsBeginImageContext(size);
         CGContextRef ctx = UIGraphicsGetCurrentContext();
         CGAffineTransform skewIt = CGAffineTransformMake(1, 0, skewValue, 1, 0, 0);
         CGContextConcatCTM(ctx, skewIt);

         CGContextDrawImage(UIGraphicsGetCurrentContext(),
                            CGRectMake(0,0,size.width, size.height),
                            theImage.CGImage);

        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

我在 touchEnded 方法中计算线的角度,绘制线的点值存储在一个名为 skewArray 的数组中:

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    if (stepThree){
        CGContextClearRect(skewContext, CGRectMake(0, 0, 1024, 668));

        CGPoint pt1 = CGPointMake([[skewArray objectAtIndex:1]point3].x, [[skewArray objectAtIndex:1]point3].y);
        CGPoint pt2 = CGPointMake([[skewArray objectAtIndex:[skewArray count]-1]point3].x, [[skewArray objectAtIndex:[skewArray count]-1]point3].y);
        CGPoint pt3 = CGPointMake([[skewArray objectAtIndex:[skewArray count]-1]point3].x, [[skewArray objectAtIndex:1]point3].y);

        CGFloat dis1 = sqrt((pow((pt2.x - pt1.x), 2) + pow((pt2.y - pt1.y), 2)));
        CGFloat dis2 = sqrt((pow((pt3.x - pt2.x), 2) + pow((pt3.y - pt2.y), 2)));
        CGFloat dis3 = sqrt((pow((pt1.x - pt3.x), 2) + pow((pt1.y - pt3.y), 2)));

        angle = acos(((-1*pow(dis2, 2))+pow(dis1, 2)+pow(dis3, 2))/(2*dis1*dis3)) * 180/3.14;

        //Do something with the angle to produce the appropriate skew value

        [self setNeedsDisplay];
       }
   }

提前感谢您的帮助!

【问题讨论】:

  • 您的问题是什么?什么不工作?您得到的结果与您的预期不同吗?您的描述提到了 2 点,但您的代码操纵了 3 点。这些点代表什么?
  • 这三个点是直线中的第一个点、直线中的最后一个点以及从前两个点导出的第三个点,以创建一个直角三角形。从这三个点我计算出每一边的长度。然后我使用边的长度来计算画线的角度。我的问题是如何将角度(或弧度)转换为可用于通过 CGAffineTransform 倾斜上下文的值,以便倾斜的角度与用户绘制的线的角度相匹配。跨度>
  • 查看Wikipedia article 的剪切映射。看起来你最好得到斜率并使用 1.0 / m 作为你倾斜的值。
  • 是的!是的!!是的!!!就是这样。如果您将其放在答案中,我会接受它,以便您获得适当的信誉。再次感谢!

标签: objective-c ios5 trigonometry quartz-2d cgaffinetransform


【解决方案1】:

查看Wikipedia article 的剪切映射。看起来你最好得到斜率并使用 1.0 / m 作为你倾斜的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 2013-09-21
    • 2016-02-03
    • 1970-01-01
    • 2013-03-16
    • 2012-06-13
    • 2017-05-18
    • 2023-03-23
    相关资源
    最近更新 更多