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

问题描述 投票:0回答:2

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

本质上我想做的是根据特定点处曲线的倾斜度来增加物体的速度。向上倾斜时速度会降低,向下倾斜时速度会增加。

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

我一直使用下面的切线方程来计算 X、Y 和 Z,但后来我只使用 Y 来建立倾斜度......我认为这一步可能是错误的

enter image description here

有什么想法吗?

编辑:

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

非常感谢

algorithm math physics bezier
2个回答
2
投票

这应该有帮助:物理教室:斜面

本质上,您需要计算倾斜角度。如果角度为 ϴ,则加速度取决于 sin(ϴ)。

我假设 z 为垂直尺寸。

如果dx、dy、dz是各个方向的梯度,则dw = sqrt(dx^2+dy^2)。 ϴ = arctan(dz/dw)。加速度 = g*sin(ϴ).

注意:您可以直接计算 sin(ϴ),无需显式计算 ϴ:sin(ϴ) = 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 对 z 的偏导数。 x 和 y。

现在,sin(ϴ) = 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(ϴ) 的方法。


2
投票
    当斜率“向下”时,
  1. 导数的值为负。是的,导数是倾斜角的正切。只有您应该注意方向。当然,他们可以改变标志。只有你应该拿 dy/dx,而不是 dy/其他东西。这都是二维曲线上的。

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

如果是 3D,假设您的曲线是 x(t)、y(t)、z(t) 的 3 个函数。那么你需要 dz/dq,其中 dq= dt*sqrt((dx/dt)^2+(dy/dt)^2)。显然,不是吗? 正如我所说,这里没有数学。只是毕达哥拉斯定理和比例。 (我以z为高度)

加法:可以重新记为 tan(a)=dz/(dt*sqrt((dx/dt)^2+(dy/dt)^2)) => tan(a)=(dz/dt)/ sqrt((dx/dt)^2+(dy/dt)^2)) ==> a=ATAN((dz/dt)/sqrt((dx/dt)^2+(dy/dt)^2) )。但请注意您移动的方向!他们可以扭转标志。对于 sqrt(^2+^2) 下,我们失去了 dt 投影的方向。

© www.soinside.com 2019 - 2024. All rights reserved.