我有一个复杂的问题,它涉及对我没有信心的数学的理解。
一些轻微的上下文可能会有所帮助。我正在为儿童构建一个 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 位置)和始终为 22.5° 的角度 (a)(顺便说一下,它被转换为弧度根据公式要求)。
通过公式传递值后,我没有得到正确的结果,因为公式假设我从 3 点开始逆时针工作,所以我必须从 (a) 中减去 180 并将其转换为弧度以获得预期结果。
这确实有效,如果我想创建一个 180° 的轨道曲线,我可以使用相同的中心点,每次只需从角度减去 22.5°。伟大的。但我想要一个更动态的轨道布局,如无花果。D&E。
那么,我将如何处理图 E 中的工作点 5,因为它代表该曲线段的中心点?我根本不知道。
另外,作为一个额外的问题,这是这样做的正确方法还是我让事情变得过于复杂?
这个问题是阻止我构建游戏的唯一问题,正如您所理解的,这有点大问题,所以我提前感谢任何人的贡献。