检查Rect框架是否有效Shape或Not

时间:2015-05-21 10:33:31

标签: ios iphone math trigonometry uibezierpath

enter image description here

上图包含4个点,用户可以拖动任何在图像框内,我想算法(逻辑),用户绘制矩形是有效矩形或NOT.Rect应该是有效的SHAPE(梯形三角形,四边形)。什么可以找到矩形是否有效的最佳方法。

以下形状无效 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

你想检查你的形状是否是四边形,特别是凸四边形(寻找concaveconvex多边形)。对于您展示的两个问题,您可以使用两个测试:

  1. 对于第一种情况,您只需检查两侧之间的内角是否高于180度,即多边形是凸的。为此,请在SO中查看此question

  2. 我不确定检查"凸性"解决了第二种情况。你应该试试。如果它没有,你需要检查四个interiror角度的总和是360度(这适用于所有四边形)。要获得两个线段之间的角度,您可以将它们转换为矢量并使用点积。顶点2处的角度为:

  3. v_ {12} =(x2-x1,y2-y1) - >从第1点到第2点的矢量

    v_ {23} =(x3-x2,y3-y2) - >从第2点到第3点的矢量

    现在计算点积

    v_ {12}。 v_ {23} =(x3 - x2)(x2 - x1)+(y3 - y2)(y2 - y1)

    段12和23之间角度的余弦是点积除以每个矢量的模数。