计算线段组成的curve/arc的半径(近似值)
Calculate radius of curve/arc formed by line segments (approximate)
该计算是针对游戏的,因此近似值优于计算密集型正确计算。我需要找到的是给定弧的半径。
在这种情况下,"curve" 可以被认为是弧线,因为这种近似已经足够好了。所以情况是这样的:
我知道:
- 绿线的长度(相等)
- 蓝色弧的长度
- α 的度数
我需要知道的:
- 半径r
背景 - 实际上我需要两件事的半径:
- 计算圆弧
B
的长度,距中心圆弧的偏移量为 x
。因此 B
的 r 将是 r + x
- 计算在该弯道上行驶的车辆的离心力
我尝试了什么:
如果我有圆周和圆弧的内角,我知道如何计算半径。但是我完全坚持给定的信息,虽然我确信它不应该太复杂..
如果你认为一个直角三角形在绿线的中间,另一个点在圆的中心,那么那个三角形中绿色线段的交点的角度是α/2,余弦该角度的比率是
cos(α/2)*r = g/2
g 绿色段的长度。
饼图顶部的角度是 π-α
,因此蓝色曲线段的长度 b
应该是
b = (π-α)*r
从两个公式中得到的半径值的差异不应超过预期的测量误差。
或者,您可以使用 Catmull-Rom (https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline), Hermite (https://en.wikipedia.org/wiki/Cubic_Hermite_spline), or natural (https://en.wikipedia.org/wiki/Spline_interpolation) 三次样条插值来计算点之间的路径。
这将为您提供 (x,y) 坐标的三次多项式,并且很容易对其进行二阶导数来获得加速度的方向和大小。
该计算是针对游戏的,因此近似值优于计算密集型正确计算。我需要找到的是给定弧的半径。
在这种情况下,"curve" 可以被认为是弧线,因为这种近似已经足够好了。所以情况是这样的:
我知道:
- 绿线的长度(相等)
- 蓝色弧的长度
- α 的度数
我需要知道的:
- 半径r
背景 - 实际上我需要两件事的半径:
- 计算圆弧
B
的长度,距中心圆弧的偏移量为x
。因此B
的 r 将是r + x
- 计算在该弯道上行驶的车辆的离心力
我尝试了什么:
如果我有圆周和圆弧的内角,我知道如何计算半径。但是我完全坚持给定的信息,虽然我确信它不应该太复杂..
如果你认为一个直角三角形在绿线的中间,另一个点在圆的中心,那么那个三角形中绿色线段的交点的角度是α/2,余弦该角度的比率是
cos(α/2)*r = g/2
g 绿色段的长度。
饼图顶部的角度是 π-α
,因此蓝色曲线段的长度 b
应该是
b = (π-α)*r
从两个公式中得到的半径值的差异不应超过预期的测量误差。
或者,您可以使用 Catmull-Rom (https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline), Hermite (https://en.wikipedia.org/wiki/Cubic_Hermite_spline), or natural (https://en.wikipedia.org/wiki/Spline_interpolation) 三次样条插值来计算点之间的路径。
这将为您提供 (x,y) 坐标的三次多项式,并且很容易对其进行二阶导数来获得加速度的方向和大小。