旋转点阵的算法

时间:2014-09-23 20:05:03

标签: algorithm math geometry

假设我有一个这样的三角形:

enter image description here

以及点[A,B,C,D,E,F]

的数组

有没有办法计算三角形的120˚旋转版本的数组,其中数组看起来像[C,E,F,B,D,A][F,D,A,E,B,C]。我正在寻找一种方法,它也可以用于分割成小块的三角形。

4 个答案:

答案 0 :(得分:1)

想象一下,你会像你一样填充阵列,但是按照以下方式: 从三角形的中心直线到A点 将其旋转到右侧。它将接触点B,C,E,F和D.以这种方式填充阵列:ABCEFD。
然后很清楚120度旋转后的样子:CEFDAB,再经过120度:FDABCE。你只需要将数组内容向左旋转2个位置。

编辑(由于下面的评论):
您可以将数组视为闭合循环结构。当您通过旋转半线遇到它们时,逐点填充“圆形阵列”。当然,你可以从任何角度开始。这只会改变圆形数组中的起点。所以它也适用于更深层次的分裂。必须要考虑的一件事是你将在某一角度遇到半个线上的2个或更多点。在这种情况下,您必须使用规则,在该规则中将它们填充到圆形数组中。你可以,例如从里到外填补它们。

那么,最初是否真的需要以不太适应的顺序ABCDEF来表达你的数组?

答案 1 :(得分:1)

假设旋转在顺时针方向上只能正好是120度且给定的起始数组是[A,B,C,D,E,F],很容易看出A,C,F只会占据索引{{1} }和0,2,5只会占用索引B,D,E

单个120度旋转会产生简单的排列规则

1,3,4

这可以进一步抽象为简单的代码

答案 2 :(得分:0)

由于这总是120˚的倍数,因此最简单的方法是计算两个旋转120˚和240˚的排列。这些排列只会将点映射到数组中的新位置。

答案 3 :(得分:0)

一般来说,没有算法可以“猜测”你如何表示顶点。

要么必须有系统的方式告诉我们,要么你可以按如下方式工作:对于每个顶点,将120°旋转应用于坐标并找到与它们匹配的另一个顶点。