gpt4 book ai didi

c# - 3D空间中的曲线拟合点

转载 作者:太空狗 更新时间:2023-10-29 18:07:48 25 4
gpt4 key购买 nike

尝试找到可以帮助我们通过一系列点绘制 3D 线的函数。

对于我们知道的每个点:日期和时间、纬度、经度、高度、速度和航向。数据可能每 10 秒记录一次,我们希望能够估计中间的点并将粒度增加到 1 秒。从而在 3D 空间中创建虚拟飞行路径。

我发现了许多曲线拟合算法,这些算法可以通过一系列点来近似直线,但它们不能保证这些点相交。它们也不考虑速度和航向来确定物体到达下一个点最可能采用的路径。

最佳答案

从物理学的角度来看:

您必须假设中间点的加速度才能获得插值。

如果您的物理系统表现相对良好(如汽车或飞机),而不是例如弹跳球,您可以继续假设加速度随点之间的时间线性变化。

恒定变化的加速运动的矢量方程为:

 x''[t] = a t + b

其中除 t 之外的所有量级都是向量。

对于您已经知道的每个段 v(t=t0) x(t=t0) tfinal 和 x(tfinal) v(tfinal)

通过求解微分方程你得到:

Eq 1:
x[t_] := (3 b t^2 Tf + a t^3 Tf - 3 b t Tf^2 - a t Tf^3 - 6 t X0 + 6 Tf X0 + 6 t Xf)/(6 Tf)

并对你得到的位置和速度施加初始和最终约束:

等式 2:

 a -> (6 (Tf^2 V0 - 2 T0 Tf Vf + Tf^2 Vf - 2 T0 X0 + 2 Tf X0 + 
2 T0 Xf - 2 Tf Xf))/(Tf^2 (3 T0^2 - 4 T0 Tf + Tf^2))

b -> (2 (-2 Tf^3 V0 + 3 T0^2 Tf Vf - Tf^3 Vf + 3 T0^2 X0 -
3 Tf^2 X0 - 3 T0^2 Xf + 3 Tf^2 Xf))/(Tf^2 (3 T0^2 - 4 T0 Tf + Tf^2))}}

因此,将 eqs 2 的值插入 eq 1 中,您将根据初始和最终位置和速度获得点的时间插值。

喂!

编辑

几个例子在二维中有突然的速度变化(在 3D 中完全相同)。如果初始速度和最终速度相似,您将获得“更直”的路径。

假设:

X0 = {0, 0}; Xf = {1, 1};
T0 = 0; Tf = 1;

如果

V0 = {0, 1}; Vf = {-1, 3};

alt text

V0 = {0, 1}; Vf = {-1, 5};

alt text

V0 = {0, 1}; Vf = {1, 3};

alt text

这是一个动画,您可以看到速度从 V0 = {0, 1} 变为 Vf = {1, 5}: alt text

在这里您可能会看到一个 3D 加速物体,其位置等间隔:

alt text

编辑

一个完整的问题:

为方便起见,我将使用笛卡尔坐标。如果你想从 lat/log/alt 转换为笛卡尔坐标,只需执行以下操作:

x = rho sin(theta) cos(phi)
y = rho sin(theta) sin(phi)
z = rho cos(theta)

其中 phi 是经度,theta 是纬度,rho 是您的高度加上地球的半径。

假设我们的分割开始于:

 t=0 with coordinates (0,0,0) and velocity (1,0,0)

结束于

 t=10 with coordinates (10,10,10) and velocity (0,0,1)  

我显然改变了坐标原点,将原点设置在我的起点。那只是为了获得漂亮的整数......

所以我们替换 a 和 b 的公式中的那些数字并得到:

a = {-(3/50), -(3/25), -(3/50)}  b = {1/5, 3/5, 2/5}  

有了这些,我们进入方程式 1,物体的位置由下式给出:

p[t] = {1/60 (60 t + 6 t^2 - (3 t^3)/5), 
1/60 (18 t^2 - (6 t^3)/5),
1/60 (12 t^2 - (3 t^3)/5)}

就是这样。你得到 1 到 10 秒的位置,用上面等式中的值替换 t。
动画运行:

alt text

编辑2

如果你不想弄乱垂直加速度(可能是因为你的“速度计”没有读取它),你可以为 z 轴分配一个恒定速度(考虑它有一个非常小的错误平行于Rho轴),等于(Zfinal - Zinit)/(Tf-T0),然后解决平面中忘记高度的问题。

关于c# - 3D空间中的曲线拟合点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4362498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com