【问题标题】:Gradient Of Bezier Curve At Given Point给定点的贝塞尔曲线梯度
【发布时间】:2012-01-26 20:09:43
【问题描述】:

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

基本上我想做的是根据曲线在特定点的倾斜度来增加物体的速度。上坡速度减慢,下坡速度增加。

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

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

有什么想法吗?

编辑:

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

非常感谢

【问题讨论】:

  • 它不在数学上。它是关于如何将已知的公式作为算法,以便结果符合预期。
  • 梯度和 B'(t) 是不同的东西,对吧?这应该是关于数学的。 @Gangnus,公式是错误的,我认为... B'(t) = dB/dt 和梯度是 (dB/dx,dB/dy,dB/dz)。
  • @Ishtar 尝试将其视为 3D 中的一个片段及其投影。是的,渐变就是你在这里写的。但它不是关于 3d 曲线,而是关于 3d 标量场。你找不到斜坡的角度:-)

标签: algorithm math physics bezier


【解决方案1】:

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

【讨论】:

  • 这最终是我要做的,但我似乎无法正确计算给定点的角度,这就是问题所在。给定点如何确定 3D 线的角度?
  • “z 为垂直”是指“进入屏幕”,那么是的,但为什么 Z 不影响曲线的斜率很重要?
  • @Chris 在我的公式中,z 维度对应于地形的垂直维度,x& y 对应于水平面。如果在您的公式中,“y”是地形的垂直尺寸,则相应地交换“dy”和“dz”。
  • 这又给出了奇怪的结果。在 atan(inverse) 和更改为度数(而不是弧度)之后,与曲线不对应。我仍然不明白为什么 Z(或公式中的 Y)在倾斜中起任何作用
【解决方案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 proection 的方向。

【讨论】:

  • 是的,这是一条 3D 曲线,另一个答案是围绕斜面,这是我想要做的,但我试图先正确计算角度。在这种情况下我会忽略 Z 轴吗?
  • 在你的例子中是 dx, dy, dz 的梯度值?并且我假设 dz/dq 可以计算出 atan 吗?
  • 阿坦-是的。至于渐变?对不起,我来自物理。对我来说,梯度是 3d 空间中标量函数的 3d 推导。我的意思是:您将曲线作为 x(t)、y(t)、z(t) 的 3 个函数。所以,他们有 dx/dt... 等等。看答案 - 加法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多