【问题标题】:Calculate radius of curve/arc formed by line segments (approximate)计算由线段形成的曲线/圆弧的半径(近似值)
【发布时间】:2017-01-22 23:23:08
【问题描述】:

计算是针对游戏的,因此近似值比计算密集的正确计算要好。我需要找到的是给定圆弧的半径。

在这种情况下,“曲线”可以被认为是一条弧线,因为这种近似已经足够好了。所以情况是这样的:

我知道:

  1. 绿线的长度(相等)
  2. 蓝色弧线的长度
  3. 以度为单位的 α 值

我需要知道的:

  • 半径r

背景 - 实际上我需要两件事的半径:

  1. 计算弧的长度B 与中心弧的偏移量x。所以B 的 r 将是 r + x
  2. 计算在该弯道上行驶的车辆的离心力

我尝试了什么:

如果我有圆弧的周长和内角,我知道如何计算半径。但是我完全被给定的信息所困扰,尽管我相信它不应该太复杂..

【问题讨论】:

    标签: math game-physics curve


    【解决方案1】:

    如果你认为一个三角形在绿线的中间有一个直角,另一个点在圆的中心,那么这个三角形中绿色线段相交处的角度是α/2,余弦比为那个角度是

    cos(α/2)*r = g/2
    

    g 一个绿色段的长度。


    饼图顶部的角度是π-α,因此对于蓝色曲线段的长度b,您应该得到

    b = (π-α)*r 
    

    您从两个公式中得到的半径值的差异不应超过预期的测量误差。

    【讨论】:

    • 我现在正在尝试关注.. 所以按照你的第一点,我的半径应该是r = (g * 0.5) / cos(α/2) 对吗?
    • 是的。还有一种回归方法,将圆方程(x[k]-cx)^2+(y[k]-cy)^2=r^2转化为线性方程cx*x[k] + cy*y[k] + 0.5*(r^2-cx^2-cy^2) = 0.5*(x[k]^2+y[k]^2),即a*x[k]+b*y[k]+c=z[k],如果给定圆上或附近的多个点可能会得到更好的结果。
    • 这很有趣。实际上我的弧线不是弧线,而是正如我所说的曲线。在我的情况下, α 将是不同角度的平均值,因为我认为这种简化已经足够好,因为与整体曲率相比,单个步骤会很小。绿色段的“分辨率”或长度可以由我控制。
    【解决方案2】:

    或者,您可以使用 Catmull-Rom (https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline)、Hermite (https://en.wikipedia.org/wiki/Cubic_Hermite_spline) 或自然 (https://en.wikipedia.org/wiki/Spline_interpolation) 三次样条插值来计算点之间的路径。

    这将为您提供 (x,y) 坐标的三次多项式,并且很容易通过它们的二阶导数来获得加速度的方向和大小。

    【讨论】:

    • 实际上我使用虚幻引擎 Spline 实现作为核心构建块。我一定会看看如何以及是否可以合并您的提示。我的目标是计算如果从样条线偏移x 的距离是多少。如果我知道角度,我认为计算离心力是我将“免费”获得的。