Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
Math 从任意角度的两点计算等边三角形的第三点,指向;“正确”;科赫雪花之路_Math_Geometry_Labview_Fractals - Fatal编程技术网

Math 从任意角度的两点计算等边三角形的第三点,指向;“正确”;科赫雪花之路

Math 从任意角度的两点计算等边三角形的第三点,指向;“正确”;科赫雪花之路,math,geometry,labview,fractals,Math,Geometry,Labview,Fractals,也许问题的标题需要一些工作 在上下文中,这是为了制作科赫雪花(在LabVIEW的公式节点中使用类似C的数学语法),因此三角形必须是正确的方式。(如给定2个点,等边三角形可能位于两个方向之一。) 简单回顾一下算法:我有一个由4个预定义坐标组成的数组,最初形成一个三角形,这是分形的第一代。要生成下一次迭代,必须为每条线(坐标对)获取1/3和2/3中点作为该面上新三角形的基础,然后计算新三角形第3点的位置(此问题的主题)。对所有当前面执行此操作,将生成的阵列连接到新阵列中,形成下一代雪花 坐标数组是按

也许问题的标题需要一些工作

在上下文中,这是为了制作科赫雪花(在LabVIEW的公式节点中使用类似C的数学语法),因此三角形必须是正确的方式。(如给定2个点,等边三角形可能位于两个方向之一。)

简单回顾一下算法:我有一个由4个预定义坐标组成的数组,最初形成一个三角形,这是分形的第一代。要生成下一次迭代,必须为每条线(坐标对)获取1/3和2/3中点作为该面上新三角形的基础,然后计算新三角形第3点的位置(此问题的主题)。对所有当前面执行此操作,将生成的阵列连接到新阵列中,形成下一代雪花

坐标数组是按顺时针顺序排列的,例如,围绕形状顺时针移动的每个顶点对应于数组中的下一个项目,第二代类似于此:

这意味着,在将三角形添加到面上时,例如,在该图像中,标记为0和1的顶点之间,首先获得中点,我将其称为“c”和“d”,您可以将“d”逆时针绕“c”旋转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代,它是这样做的:(注意,左边的看似分离的三角形是由顶部和底部的2个三角形组成的,它们的<代码> E < /代码>顶点在中间相交,实际上不是独立的三角形。)

我怀疑根据天气的不同,有必要使用稍有不同的方程式,比如说,ax或bx较大等等,也许是因为需要考虑正弦波/余弦的周期性(关于球坐标中的象限?),因为看起来错位的三角形是60度,只是角度在错误的线之间。然而,这只是一个猜测,我无法想象如何通过编程实现这一点,更不用说在纸上了

谢天谢地,数学公式节点允许if和else语句,如果是这样的话,这将允许实现,但如前所述,我不太熟悉调整我天真地称之为“象限的事情”,并且不确定如何知道每个情况下哪个象限是一个象限


这是一个冗长而杂乱无章的问题,不可避免地会引起胡说八道,因此,如果您有任何澄清问题,请发表评论,我将尝试解决所有问题

多亏了@JohanC,我才回答了自己的问题。毫不奇怪,这是一个做出许多微小调整并在做对之前放弃的案例

正确的公式是:

ex = (cos(1.0471975512) * dX + sin(1.0471975512) * dY) + cx;
ey = (-sin(1.0471975512) * dX + cos(1.0471975512) * dY) + cy;
只是给第二个正弦函数加一个负号。请注意,如果逆时针移动,则需要顺时针旋转点,因此第一个正弦函数为负值,第二个正弦函数为正值


其中一个
sin(1.0471975512)
需要一个减号你完全正确,我是个傻瓜!!我来回摆弄着一些微小的变化,我一定是跳过了。如此接近如此之久。。。作为奖励,我一开始换了一个错误的,制作了一个反科赫的,所以享受这个相当漂亮的创作吧!你应该保留那个版本作为一个选项…是的,我会为它放一个开关盒。我个人认为它更美观!不幸的是,这是一个没有要求它的规范,所以我怀疑它是否应该被包括在内。我想如果我将其编码为除非硬编码开关被更改,否则不运行,那么一切都好了?您也可以尝试使用正常公式执行一个或两个级别,使用逆时针版本执行以下级别。无论如何,这都取决于初始三角形的方向。你可以问两个数字,一个是正常水平的数量,另一个是“反”水平的数量,而不是问水平的数量?未输入任何内容时,默认为零。