我有一个复杂的问题,它涉及到我不太自信的数学理解。一些背景可能会有所帮助。我正在为儿童构建一个3D火车模拟器,并使用WebGL在浏览器中运行。我试图创建一个点网络来放置轨道资产(见图像)并为火车提供移动参考。为了帮助解释我的问题,我创建了一个可视化表示,因为我是一个可以编写脚本而不是程序员或数学家的设计师:
基本上,我有3个形状(图A、B和C),尽管它们有宽度,但可以表示为直线(A)和曲线(B和C)。曲线B和C是从A派生(弯曲修改)的,因此长度都相同(l),即112。曲线(B和C)的半径(r)分别为285.5,它们被弯曲的角度(a)为22.5°。
每个形状(A、B和C)都有一个注册点(起始点),由它们各自附加的绿色框的中心所示。
我要做的是创建一个以0,0为起点的“轨道”网络(使用标准笛卡尔坐标系)。
我的问题是在曲线之后放置下一个元素的位置。如果是直线轨道,那么没有问题,因为我可以使用长度作为沿y轴的恒定偏移量,但那会很无聊,所以我需要添加曲线。
D图演示了可能的轨道布局示例,但请理解,我不是在寻找静态答案(基于图像中所有位置的位置),我需要一个公式,无论如何配置轨道都可以应用。
使用D图,我尝试计算第一个弯曲元素之后放置第二个弯曲元素的位置。我使用绘制圆的周长点的公式,给出其圆心坐标和半径(E图)。
我将点1设置为直线的长度(y位置)。我可以轻松地计算出圆的中心,因为那只是偏移y位置、半径(r)的偏移量(x位置)和角度(a),它总是22.5°(顺便说一下,按照公式要求将其转换为弧度)。
通过公式传递值后,我没有得到正确的结果,因为该公式假设我是逆时针从3点钟开始工作,因此我必须从(a)中扣除180并将其转换为弧度才能得到预期的结果。
那确实起作用,如果我想创建一个180°的轨道曲线,我可以使用相同的中心点,并每次从角度中减去22.5°。太好了。但我想要一个更动态的轨道布局,就像D和E图一样。
基本上,我有3个形状(图A、B和C),尽管它们有宽度,但可以表示为直线(A)和曲线(B和C)。曲线B和C是从A派生(弯曲修改)的,因此长度都相同(l),即112。曲线(B和C)的半径(r)分别为285.5,它们被弯曲的角度(a)为22.5°。
每个形状(A、B和C)都有一个注册点(起始点),由它们各自附加的绿色框的中心所示。
我要做的是创建一个以0,0为起点的“轨道”网络(使用标准笛卡尔坐标系)。
我的问题是在曲线之后放置下一个元素的位置。如果是直线轨道,那么没有问题,因为我可以使用长度作为沿y轴的恒定偏移量,但那会很无聊,所以我需要添加曲线。
D图演示了可能的轨道布局示例,但请理解,我不是在寻找静态答案(基于图像中所有位置的位置),我需要一个公式,无论如何配置轨道都可以应用。
使用D图,我尝试计算第一个弯曲元素之后放置第二个弯曲元素的位置。我使用绘制圆的周长点的公式,给出其圆心坐标和半径(E图)。
我将点1设置为直线的长度(y位置)。我可以轻松地计算出圆的中心,因为那只是偏移y位置、半径(r)的偏移量(x位置)和角度(a),它总是22.5°(顺便说一下,按照公式要求将其转换为弧度)。
通过公式传递值后,我没有得到正确的结果,因为该公式假设我是逆时针从3点钟开始工作,因此我必须从(a)中扣除180并将其转换为弧度才能得到预期的结果。
那确实起作用,如果我想创建一个180°的轨道曲线,我可以使用相同的中心点,并每次从角度中减去22.5°。太好了。但我想要一个更动态的轨道布局,就像D和E图一样。
那么,如何处理图E的第5个点呢?因为它代表了该曲线段的中心点。我完全不知道该怎么做。
另外,作为一个额外的问题,这样做是正确的吗?还是我把事情搞复杂了?
这个问题是阻止我制作游戏的唯一问题,正如您所理解的那样,这是一个相当大的问题,所以提前感谢任何人对此的贡献。