问题标题可能需要一些工作。
在上下文中,这是出于Koch Snowflake的目的(在LabVIEW的公式节点中使用类似C的数学语法),因此为什么三角形必须是正确的方式。(给定2个点,等边三角形可能在两个方向之一上。)
简要介绍一下算法:我有一个由4个预定义坐标组成的数组,这些数组最初形成一个三角形,即分形的第一个“生成”。要生成下一次迭代,必须为每条线(一对坐标)获得1 / 3rd和2 / 3rd中点作为该面上新三角形的基础,然后计算新的第3点的位置三角形(此问题的主题)。对所有当前面执行此操作,将结果数组连接到一个新数组中,从而形成下一代雪花。
坐标数组按顺时针顺序排列,例如,围绕形状沿顺时针方向行进的每个顶点对应于数组中的下一项,对于第二代来说是这样的:
这意味着,当要在一个表面上(例如,在该图像之间)将三角形标记为0和1时,您首先会得到中点,我将其称为“ c”和“ d”,您可以旋转“ d”抗C‘周围-clockwise’60度以找到新的三角形顶部点将(标记e
)。
我相信这应该在雪花周围的任何地方都可以保持(例如,将较早的位置逆时针旋转60度)在雪花周围的任何地方,但是目前,我的数学似乎仅在初始三角形具有垂直边的情况下有效:[(0,0) ,((0,1)]。否则,三角形沿其他方向偏离。
我相信我已经正确构建了自己的循环,使得生成VI的三角形(虚拟仪器,实际上是书面语言中的“函数”)可以依次在每个线段上工作,但是我的实际计算无法正常工作,我很茫然如何向正确的方向发展。下面是我目前用于从单个线段计算三角形点的数学运算,其中a
和b
是线段的原始顶点,c
并d
形成与原始线成一直线的新三角形底,并且e
是突出的部分。我不想将其称为“顶部”,因为从右上角到左下角的线段形成的三角形,“顶部”会一直向下。
cx = ax + (bx - ax)/3;
dx = ax + 2*(bx - ax)/3;
cy = ay + (by - ay)/3;
dy = ay + 2*(by - ay)/3;
dX = dx - cx;
dY = dy - cy;
ex = (cos(1.0471975512) * dX + sin(1.0471975512) * dY) + cx;
ey = (sin(1.0471975512) * dX + cos(1.0471975512) * dY) + cy;
注意1.0471975512
弧度仅为60度。
目前,对于第二代,它做到了这一点(请注意,左侧看似分离的三角形由顶部和底部的2个三角形组成,e
顶点在中间相交,实际上不是一个独立的三角形。)
我怀疑有必要根据天气ax
或bx
更大等因素而使方程式稍有不同,也许与如何考虑sin / cos的周期性有关(与球坐标系中的象限有关?)。错位的三角形为60度,只是角度在错误的线之间。但是,这只是一个猜测,我无法想象如何以编程方式做到这一点,更不用说在纸上了。
Thankfully the maths formula node allows for if and else statements which would allow for this to be implemented if it's the case but as said I am not awfully familiar with adjusting for what I'll naively call the "quadrants thing", and am unsure how to know which quadrant one is in for each case.
This was a long and rambling question which inevitably tempts nonsense so if you've any clarifying questions please comment and I'll try to fix anything/everything.
Answering my own question thanks to @JohanC, Unsurprisingly this was a case of making many tiny adjustments and giving up just before getting it right.
The correct formula was this:
ex = (cos(1.0471975512) * dX + sin(1.0471975512) * dY) + cx;
ey = (-sin(1.0471975512) * dX + cos(1.0471975512) * dY) + cy;
只需在第二个正弦函数上加上减号即可。请注意,如果一个人沿逆时针方向行驶,那么一个人将要沿顺时针方向旋转点,因此您将第一个正弦函数取反,而第二个正弦函数取反。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句