Math 如何在知道半径和圆心的情况下计算圆上的点

Math 如何在知道半径和圆心的情况下计算圆上的点,math,geometry,Math,Geometry,我有一个复杂的问题,它涉及到对数学的理解,我对此没有信心 一些细微的上下文可能会有所帮助。我正在为孩子们构建一个3D火车模拟器,它将使用WebGL在浏览器中运行。我正试图创建一个点网络来放置轨道资源(见图),并为列车的行驶提供参考 为了帮助解释我的问题,我创建了一个可视化表示,因为我是一个能够编写脚本的设计师,而不是真正的程序员或数学家: 基本上,我有3个形状(图A、B和C),虽然它们有宽度,但可以表示为A和曲线(B和C)的直线。曲线B&C由A导出(弯曲修改),因此所有曲线都具有相同的长度(l

我有一个复杂的问题,它涉及到对数学的理解,我对此没有信心

一些细微的上下文可能会有所帮助。我正在为孩子们构建一个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

那么,我该如何处理图E中的工作点5,因为它代表了曲线段的中心点?我完全不知道

另外,作为一个额外的问题,这是做这件事的正确方式还是我把事情复杂化了


这个问题是阻止我建立我的游戏的唯一问题,正如你所理解的,这是一个很大的问题,因此我提前感谢所有人的贡献。

第5点与3点和2点的距离相等,但方向相反。

当你建立赛道时,要放置的下一条轨道的位置需要相对于轨道当前端的位置和方向

我将存储(
x
y
)位置和角度
a
,以指示当前点(以
x
y
从0开始,
a
从pi/2弧度开始,对应于“从3点钟开始逆时针”系统中的直线上升)

然后构造

fx = cos(a);
fy = sin(a);
lx = -sin(a);
ly = cos(a);
对应于相对于我们当前面对的方向的“向前”和“向左”向量的x和y分量。如果我们想将头寸向前移动一个单位,我们会将(x,y)增加(fx,fy)

在您的情况下,放置轨道直线段的规则是:

x=x+112*fx
y=y+112*fy
放置曲线的规则稍微复杂一些。对于右转的曲线,我们需要向前移动112*sin(22.5°),然后向右移动112*(1-cos(22.5°),然后顺时针旋转22.5°。在代码中

x=x+285.206*sin(22.5*pi/180)*fx // Move forward
y=y+285.206*sin(22.5*pi/180)*fy

x=x+285.206*(1-cos(22.5*pi/180))*(-lx) // Side-step right
y=y+285.206*(1-cos(22.5*pi/180))*(-ly)

a=a-22.5*pi/180 // Turn to face new direction
左转就像右转一样,但角度为负

要放置后续工件,只需再次运行此过程,使用现在更新的
a
值计算
fx
fy
lx
ly
,然后根据下一个轨道工件的类型递增
x


<> P.>还有一点你可以考虑,在我的经验中,如果你坚持做90°转弯或相当对称的布局,那么建立与这些片段形成闭合回路的轨道通常是有效的。然而,很容易制作出不完全连接的轨道,而且不清楚如何修改这些轨道以允许m加入。如果你的程序允许孩子们设计自己的布局,也许需要记住一些事情。

在我发布的静态示例中(轨迹配置A B C)然后是的,但我的轨迹布局会有所不同。虽然这给了我一个想法。我会回来找你。在我看来,你把事情复杂化了。你可能想看看样条曲线。这是一种数学技术,你可以将一条长路径分割成几个较小的函数。所以在这个例子中,你不会处理圆。你会从原点取直线,然后沿着函数定义的曲线行进(不是圆的这一部分,这将是一个令人头痛的问题)。每一段从上一段结束的地方开始,并且每一段的曲率都应该是独立的。希望这能有所帮助。谢谢你的回答和详细的解释。我确实认为可能有一种更简单的方法,最终会达到目的,因为我已经使用三角函数简化了其中的一些部分