我似乎无法弄清楚如何计算以下情况下曲线的倾斜度...
基本上我想做的是根据曲线在特定点的倾斜度来增加物体的速度。上坡速度会降低,下坡速度会增加。
我使用贝塞尔曲线上点 t 的导数来建立切线,但这似乎不正确,因为如果斜率向下,我预计该值为负。
我一直在使用下面的等式来计算 X、Y 和 Z 的切线,但后来我只使用 Y 来建立倾斜度……我认为这一步可能是错误的
有任何想法吗?
编辑:
最终,这是一个沿着倾斜平面移动的物体,但我无法确定平面的角度来做到这一点,我相信如果我能正确找到角度,它可以解决问题。我尝试取相关点,然后取前面的另一个点(例如 t = 0.5,然后前面的点为 t=0.51),然后使用 tan 计算角度。我完全忽略了 Z 轴,但这是错误的吗?如果不是,我应该如何计算角度?
非常感谢
最佳答案
这应该会有所帮助: http://www.physicsclassroom.com/Class/vectors/U3L3e.cfm 。
本质上,您需要计算倾斜角。如果角度为\theta ,则加速度取决于 sin(\theta)。
我假设 z 作为垂直维度。
如果 dx,dy 和 dz 是每个方向的梯度,则 dw = sqrt( dx^2+dy^2)。\theta = tan_inverse(dz/dw)。加速度 = g*sin(\theta)。
注意:您可以直接计算 sin(\theta) 而无需明确计算\theta。 sin(\theta) = dz/sqrt(dx^2+dy^2+dz^2)。
=== 更正式的描述 ===
设 x 为东西向维度,y 为南北向维度,z 为上下维度。
让 z = F(x,y) 给出任何给定位置 x,y 的地形高程。
计算 dz/dx = fx(x,y) 和 dz/dy = fy(x,y),即 z w.r.t 对 x 和 y 的偏导数。
现在, sin(\theta) = dz/sqrt(dx^2+dy^2+dz^2) = 1/(sqrt( (dx/dz)^2+ (dy/dz)^2 )= 1/( sqrt( (1/fx(x,y))^2, (1/fy(x,y))^2 )。
这就是你计算 sin(\theta) 的方式。
关于algorithm - 贝塞尔曲线在给定点的梯度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9024608/