2016-11-03 91 views
1

嗨,我想执行多边形三角测量。我了解简单多边形(凹面或凸面)的耳廓修剪方法。我被困在发现一个顶点是否是反射的。我在多个地方阅读的内容是关于顺时针和逆时针方向,我无法理解。总之,这些方向指的是什么,请给我一些关于检查顶点是否反射的提示。 here is the link of an article i am following:多边形三角测量反射顶点

,这里是公式,他们已经使用:

// Input 
    VECTOR a, b, c; // the parts of our triangle. 
    // if (b.x - a.x) * (c.y - b.y) - (c.x - b.x) * (b.y - a.y) > 0 
    // we are counter-clockwise 

什么点在这里,我无法理解。

回答

2

您的输入多边形在大多数情况下是连续顶点列表,它们以逆时针顺序表示您的多边形。这意味着当沿着多边形的边界行进时(如果没有孔),它的内部应该位于每个穿过的边的左侧。如果想知道单个顶点是凸的还是反射的(凸的意思是小于180°的内角,否则是反射),那么有几种方法。最常用的是应用确定性。如果顶点形成一个左转,这个确定给了我们一个更大的结果,这意味着三个连续的顶点a,b和c在b上形成一个凸起的角度;否则小于零。现在的公式:(b.x - a.x) * (c.y - b.y) - (c.x - b.x) * (b.y - a.y) > 0就是这样做的。它将三个顶点转换成两个方向矢量:b-ac-b,那么这个确定就已经是给定的公式,并告诉我们是否在b上出现了左转或右转。

编辑,由于在注释的问题:

enter image description here

让我们选择=(2 1)中,b =(5 4),和c =(3 6)。因此,如右图所示的方向由下式给出:s = b-a =(3 3)和t = c-b =( - 2 2)。现在det(s t)给我们s.x*t.y - t.x*s.y = 3*2 - (-2)*3 = 12 > 0。因此,如果我们站在a点,我们走到b,我们必须左转到c。

+0

Thankyou :)晚了一秒,想通了:)反正非常感谢你花时间和帮助,它肯定使事情更加清晰 – anekix

+0

你能给一个图形表示什么是顶点是a,b和c是什么。 。我想知道为什么我们选择b-a和c-b – anekix