从任意角度的两个点计算等边三角形的第三个点,指出科赫雪花的“正确”方式

ch4rl1e97

问题标题可能需要一些工作。

在上下文中,这是出于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的三角形(虚拟仪器,实际上是书面语言中的“函数”)可以依次在每个线段上工作,但是我的实际计算无法正常工作,我很茫然如何向正确的方向发展。下面是我目前用于从单个线段计算三角形点的数学运算,其中ab线段的原始顶点,cd形成与原始线成一直线的新三角形底,并且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顶点在中间相交,实际上不是一个独立的三角形。)

严重破碎

我怀疑有必要根据天气axbx更大等因素而使方程式稍有不同,也许与如何考虑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.

ch4rl1e97

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为平面中的给定两个点创建等边三角形-Python

Prolog:查找从 DB 点构建的所有等边三角形

C#在另一个等边三角形的边上绘制等边三角形

在中心旋转一个等边三角形

Excel公式来计算三角形中的第三个点

如何计算等边三角形的坐标?

计算等边三角形的节点域

当已知所有边,角度和前两个点时,使用Javascript函数查找三角形的第三个点

计算三角形的第三个边

在较大的等边三角形内创建等边三角形网格/网格

绘制等边三角形C#

使用嵌套的for循环绘制等边三角形?

用J语言打印等边三角形

用于等边三角形检测的霍夫变换

找出哪个三角形最接近等边三角形,最快/最简单的方法

用两个点绘制等腰三角形/箭头

给定等边三角形的 2D 角坐标的 3D 法向量

Java计算非直角三角形中的角度点

给定(象限i)中的三个(x,y)点,它们组成一个直角三角形,求出三角形的排列

尝试通过对所有三个点应用相同的变换来制作一个可以旋转和移动的三角形

检查一组点是否描述了一个三角形

两个三角形组成一个矩形

两个3D三角形,用于计算z阶(图形)的方法

创建与三角形角平行的点

请为三角形的边的长度,提示程序并报告三个角度

将 HTML 背景设置为两个三角形

使用索引缓冲区绘制两个三角形

用两个三角形定义菱形

如何在图像旁边创建两个三角形?