Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 斜交与角度的关系——仿射变换_Objective C_Ios5_Trigonometry_Quartz 2d_Cgaffinetransform - Fatal编程技术网

Objective c 斜交与角度的关系——仿射变换

Objective c 斜交与角度的关系——仿射变换,objective-c,ios5,trigonometry,quartz-2d,cgaffinetransform,Objective C,Ios5,Trigonometry,Quartz 2d,Cgaffinetransform,我正在开发一个iPad应用程序,它允许用户用手指画一条线,然后使用该线的起点和终点,我计算出该线相对于iPad x/y平面的角度 我的问题是,我想使用绘制线的角度来设置我正在绘制到当前上下文中的图像的倾斜 这是我的drawRect方法中的相关代码: CGSize size = CGSizeMake(1024, 768); UIGraphicsBeginImageContext(size); CGContextRef ctx = UIGrap

我正在开发一个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];
       }
   }

提前感谢您的帮助

查看此剪切贴图。看起来你最好得到斜率,并在倾斜值时使用1.0/m。

你的问题是什么?什么不起作用?你得到的结果与你预期的不同?您的描述提到了2点,但您的代码操纵了3点。这些点代表什么?这三个点是直线上的第一个点、直线上的最后一个点和从前两点衍生的第三个点,以创建直角三角形。从这三个点我计算每边的长度。然后,我使用边的长度来计算绘制线的角度。我的问题是如何将以度(或弧度)为单位的角度转换为可用于通过CGAffineTransform扭曲上下文的值,以便扭曲的角度与用户绘制的直线的角度匹配。请查看此剪切贴图。看起来你最好得到坡度,并在倾斜值时使用1.0/m。是的!对对就这样。如果你把它写在回答中,我会接受它,这样你就可以得到适当的信任。再次感谢!