如何确定多边形旋转角度

时间:2009-03-24 11:16:25

标签: geometry rotation polygon angle

我正在编写一个程序(.net)来创建一个体育场风格的布局,并且需要确定每个多边形与水平方向相比的旋转角度。

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

以下面的图像为例来模拟面对方向的每个变体(由红线表示)我如何确定使形状在顶部具有红线所需的旋转角度,如已经显示的那样形状5。

http://i40.tinypic.com/16ifhoo.gif alt text

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

我不确定是否需要一些中心参考点来帮助所有多边形。

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

3 个答案:

答案 0 :(得分:0)

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

不幸的是,我没有为你提供所需的公式,但谷歌搜索“普通矢量”和/或在维基百科上搜索它应该让你开始很好,我想。可能是所谓的“交叉产品”的方向。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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

导管之间的比率是(x2-x1)/(y2-y1)。然后红线的旋转是arctan((x2-x1)/(y2-y1))。注意y1-y1为0时的情况!

让我们试试你的照片中的一个例子,带有坐标的多边形6(55,65)和(65,55)。输入google:“arctan((65-55)/(55-65))in degrees”