2

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

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

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

http://i40.tinypic.com/16ifhoo.gif 替代文字

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

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

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

4

3 回答 3

0

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

不幸的是,我没有为你提供所需的公式,但我认为谷歌搜索“法线向量”和/或在维基百科上搜索它应该让你开始就好了。可能朝着所谓的“交叉产品”的方向发展。

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

于 2009-03-24T11:30:39.910 回答
0

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

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

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

于 2009-03-24T11:33:08.327 回答
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)。输入谷歌:“arctan((65-55)/(55-65)) 度数”

于 2009-03-24T11:37:57.363 回答