Geometry 如何确定多边形旋转角度

Geometry 如何确定多边形旋转角度,geometry,rotation,polygon,angle,Geometry,Rotation,Polygon,Angle,我正在编写一个程序(.net)来创建体育场样式的布局,并需要确定每个多边形相对于水平面的旋转角度 这样我就可以构造多边形的内容,并正确地旋转它以适应内部 以下图为例,模拟每个面向方向的变化(由红线指示),我如何确定使形状顶部有红线所需的旋转角度,如形状5所示 我已经找到了确定构成红线的点的角度的逻辑,但我还需要知道旋转,以使其回到水平 我不确定是否需要所有多边形的中心参考点来提供帮助 我怎样才能最好地解决这个问题呢?我会尝试计算每条红线上的法向量(例如,多边形5为0度,多边形4为45度,多边

我正在编写一个程序(.net)来创建体育场样式的布局,并需要确定每个多边形相对于水平面的旋转角度

这样我就可以构造多边形的内容,并正确地旋转它以适应内部

以下图为例,模拟每个面向方向的变化(由红线指示),我如何确定使形状顶部有红线所需的旋转角度,如形状5所示

我已经找到了确定构成红线的点的角度的逻辑,但我还需要知道旋转,以使其回到水平

我不确定是否需要所有多边形的中心参考点来提供帮助


我怎样才能最好地解决这个问题呢?

我会尝试计算每条红线上的法向量(例如,多边形5为0度,多边形4为45度,多边形3为90度等等),然后计算旋转该法向量所需的角度,从而使法向量“指向上”应该非常简单

不幸的是,我没有现成的公式供你使用,但我认为谷歌搜索“法向量”和/或在维基百科上搜索它应该可以让你很好地开始。可能是在所谓的“交叉积”的方向上


为此,不需要所有多边形的中心参考点(法线方向与绝对坐标无关)。

我将尝试计算每条红线上的法向量(例如,多边形5为0度,多边形4为45度,多边形3为90度,等等)然后旋转法线所需要的角度-以及匹配的多边形-这样法线“指向上”应该非常简单

不幸的是,我没有现成的公式供你使用,但我认为谷歌搜索“法向量”和/或在维基百科上搜索它应该可以让你很好地开始。可能是在所谓的“交叉积”的方向上


为此,不需要所有多边形的中心参考点(法线方向与绝对坐标无关)。

如果您知道某个多边形(例如a)的红线角度,则该多边形位于该线的一侧或另一侧。因此:

  • 使用线两侧附近某些像素的平均颜色来确定哪种情况。
    • 如果多边形位于直线上方,则旋转角度为180+a
    • 如果多边形位于直线下方,则旋转为a

根据测量a的方式,上面和下面对应于直线的较小角度边和较大角度边。

如果您知道某个多边形(例如a)的红线角度,则该多边形位于该直线的一侧或另一侧。因此:

  • 使用线两侧附近某些像素的平均颜色来确定哪种情况。
    • 如果多边形位于直线上方,则旋转角度为180+a
    • 如果多边形位于直线下方,则旋转为a

其中,根据测量a的方式,“上”和“下”分别对应于直线的较小角度边和较大角度边。

sin、cos、tan函数允许您将三角形边比率转换为度

想象一下,红线的一端在(x1,y1),另一端在(x2,y2)。您可以将红线视为矩形三角形的一部分,并使用arctan获取度数


阴极之间的比率为(x2-x1)/(y2-y1)。然后,红线的旋转为arctan((x2-x1)/(y2-y1))。当心y1-y1为0时的情况


让我们试试图片中的一个例子,多边形6与坐标(55,65)和(65,55)。在谷歌中输入:“arctan((65-55)/(55-65))单位为度”

正弦波、余弦、正弦波函数允许您将三角形边缘比率转换为度

想象一下,红线的一端在(x1,y1),另一端在(x2,y2)。您可以将红线视为矩形三角形的一部分,并使用arctan获取度数


阴极之间的比率为(x2-x1)/(y2-y1)。然后,红线的旋转为arctan((x2-x1)/(y2-y1))。当心y1-y1为0时的情况


让我们试试图片中的一个例子,多边形6与坐标(55,65)和(65,55)。输入谷歌:“arctan((65-55)/(55-65))以度为单位”

“小心y1-y1为0时的情况”-这就是ATan2函数的好处所在!“当心y1-y1为0时的情况”-这就是ATan2函数的好处所在!这些想法帮助我找到了一个解决办法(还有一些睡眠)。给定x/y轴,如果红线角度a为:0,则无问题。有一件事要考虑的是,这可能需要在未来变化——不同的体育场形状和设置(例如,几排座位)。你的代码需要处理吗?当然。这只是一个例子。我认为它仍然可以处理,因为我只想确定大纲的旋转,这样我就可以将相同的内容/座位应用到大纲中。当然,理想的设计应该是一个很好的CAD,有明确的座椅可供参考……但这是一个更大的商业要求。这些想法帮助我找到了一个解决方案(还有一些睡眠)。给定x/y轴,如果红线角度a为:0,则无问题。有一件事要考虑的是,这可能需要在未来变化——不同的体育场形状和设置(例如,几排座位)。你的代码需要处理吗?当然。这只是一个例子。我认为它仍然可以处理,因为我只想确定大纲的旋转,这样我就可以将相同的内容/座位应用到大纲中。当然,理想的设计应该是一个很好的CAD,有明确的座椅可供参考……但这是一个更大的商业要求。