Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 旋转点阵列的算法_Algorithm_Math_Geometry - Fatal编程技术网

Algorithm 旋转点阵列的算法

Algorithm 旋转点阵列的算法,algorithm,math,geometry,Algorithm,Math,Geometry,假设我有一个这样的三角形: 和一组点[A,B,C,D,E,F] 是否有一种方法可以计算120˚旋转版本的三角形阵列,其中阵列的形状如下[C,E,F,B,D,a]或[F,D,a,E,B,C]。我正在寻找一种同样适用于被分割成小块的三角形的方法。想象一下,你会用以下方式填充数组,而不是像以前那样填充: 从三角形中心到a点取一条直线。 将其向右旋转。它将接触点B、C、E、F和D。按如下方式填充阵列:ABCEFD。 然后很明显,它在旋转120度后是什么样子:CEFDAB,再旋转120度后是什么样子:F

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

和一组点
[A,B,C,D,E,F]


是否有一种方法可以计算120˚旋转版本的三角形阵列,其中阵列的形状如下
[C,E,F,B,D,a]
[F,D,a,E,B,C]
。我正在寻找一种同样适用于被分割成小块的三角形的方法。

想象一下,你会用以下方式填充数组,而不是像以前那样填充:
从三角形中心到a点取一条直线。
将其向右旋转。它将接触点B、C、E、F和D。按如下方式填充阵列:ABCEFD。
然后很明显,它在旋转120度后是什么样子:CEFDAB,再旋转120度后是什么样子:FDABCE。您只需将数组内容向左旋转2个位置

编辑(由于下面的评论):
你可以把数组看作是封闭的圆形结构。通过旋转半直线,在遇到“圆形阵列”时,逐点填充它们。当然,你可以从任何角度出发。这将简单地更改圆形阵列中的起点。因此,它也适用于更深层次的分裂。有一件事你必须考虑的是,你会遇到在一定的角度2或更多的点在半行。在这种情况下,您必须使用一个规则,按照该规则将它们填充到循环数组中。例如,你可以从里往外填充


那么,一开始真的需要用不太合适的顺序ABCDEF来表示数组吗

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

假设顺时针方向的旋转角度仅为120度,给定的起始数组为
[A,B,C,D,E,F]
,很容易看出
A,C,F
将只占据索引
0,2,5
B,D,E
将只占用索引
1,3,4

简单的排列规则适用于单个120度旋转

index 0 -> 5
index 2 -> 0
index 5 -> 2
index 1 -> 3
index 3 -> 4
index 4 -> 1

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

一般来说,没有算法可以“猜测”顶点的表示方式


要么你需要有一个系统的方法告诉我们,要么你可以这样做:对于每个顶点,对坐标应用120°旋转,然后找到另一个匹配它们的顶点。

Um-将三角形围绕其中心旋转120度,不就是产生相同的三角形吗(假设所有边的长度相同)?是的,但是如果您保持顶点的标签和构建阵列的顺序,那么在围绕中点旋转120度后,阵列将不同@安德烈亚斯轮换的其他条件是什么?它总是120度的倍数吗?如果不是,那么如果基边与屏幕水平面不平行,构建阵列的协议是什么?@Pankrates,是的,总是120˚。这个想法是存储从A到B的线,从index0到index1,通过旋转数组我可以得到坐标C和E或F和E。三角形和图中一样简单。你如何建议将这个三角形分成8个部分(如下面的评论所述)?16我可以看到,但不是8。只需在底部添加另一行矩形,或将每条边拆分为3段而不是2段,但这是否也适用于拆分为8段而不是4段的三角形。不,初始顺序并不重要。好的,但是对于一个被分成8个而不是4个部分的三角形来说,这也行吗?不,显然不行,因为它只考虑6个顶点。然而,很有可能推导出一种适用于三角形任何分割的通用算法,但这并非微不足道。我建议考虑另一种构建阵列的方法,在这种情况下@Reinhard提出了一个非常简单的解决方案