贝塞尔曲线的梯度在给定点

时间:2012-01-26 20:09:44

标签: algorithm math physics bezier

我似乎无法弄清楚如何计算以下情况的曲线倾斜度......

基本上我要做的是根据特定点处曲线的倾斜度来提高对象的速度。如果倾斜向上,速度将降低,向下倾斜则增加。

我使用贝塞尔曲线上的点t的导数来建立切线,但这似乎并不正确,因为如果斜率向下,我认为该值为负。

我一直使用下面的等式来评估X,Y和Z的切线但是我只用Y来建立倾斜...我认为这一步可能是错误的

enter image description here

有什么想法吗?

编辑:

最终这是一个沿倾斜平面移动的物体,但为了做到这一点我无法确定平面的角度,我相信如果我能正确找到它可以解决问题的角度。我试图考虑问题,然后是前面的另一个点(例如t = 0.5,然后前面的一个点将是t = 0.51),然后使用tan计算角度。我完全忽略了Z轴,但那是错的吗?如果不是我应该如何计算角度?

非常感谢

2 个答案:

答案 0 :(得分:2)

  1. 当斜率为“向下”时,派生的值为为负。是的,推导是倾斜角的正切。只有你应该注意方向。当然,他们可以改变标志。只有你应该采取dy / dx,而不是dy /别的东西。这都是2d曲线。

  2. 你在最后一段提到了Z.你的曲线是3D吗?那么,当然,应该更准确地说出“推导”一词。推导出你需要什么?第二个想法是 - 请更好地解释,你想要什么。顺便说一句,也许在你正确地写下任务之后,你会看到解决方案显而易见。

  3. 如果它是3D,我们可以说,你的曲线是x(t),y(t),z(t)的3个函数。然后你需要dz / dq,其中dq = dt * sqrt((dx / dt)^ 2 +(dy / dt)^ 2)。显然,不是吗? 正如我所说,这里没有数学。仅仅是Pythagor的定理和比例。 (我把z作为高度)

    添加:可以将其重新记录为tan(a)= dz /(dt * sqrt((dx / dt)^ 2 +(dy / dt)^ 2))=> tan(a)=(dz / dt)/ sqrt((dx / dt)^ 2 +(dy / dt)^ 2))==>一个= ATAN((DZ / dt)的/ SQRT((DX / dt)的^ 2 +(DY / dt)的^ 2))。但要注意你要移动的方向!他们可以扭转这个标志。对于低于sqrt(^ 2 + ^ 2),我们已经失去了dt保护的方向。

答案 1 :(得分:2)

这应该有所帮助: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)。

这就是你如何计算罪(\ theta)。