簡體   English   中英

矩陣形式的貝塞爾曲線的導數

[英]Derivative of a Bezier curve in matrix form

我正在處理一些貝塞爾曲線。 我直接使用矩陣在參數處得到我的 position,不涉及 decasteljau,我覺得它更優雅:

v_t = np.array([1, t, t**2, t**3])
cubic = np.array([
    [ 1.,  0.,  0.,  0.],
    [-3.,  3.,  0.,  0.],
    [ 3., -6.,  3.,  0.],
    [-1.,  3., -3.,  1.]
])
pos_at_param = np.dot(np.dot(v_t, cubic),  control_points)

工作得很好。 但我想使用相同的邏輯計算我的切線

無論我從

(1-t)**3 + 
3(1-t)**2t + 
3(1-t)t**2 + 
t**3

獲取所有這些導數,並從中重新創建一個矩陣,

或者從我在網上找到的導數開始

3(1-t)(1-t) * (p1 - p0) + 
6t(1-t) * (p2 - p1) + 
3tt * (p3 - p2)

給我

  [ 3.,  0., 0.]
  [-6.,  6., 0.]
  [ 3., -5., 3.]

這些似乎都沒有給我在給定參數的曲線上的實際導數/切線向量。 難道我做錯了什么? 是否根本不可能使用與 position 相同的邏輯來計算曲線的正切?

謝謝你。

編輯:回答@MBo:是的,雖然不確定我是否正確應用它。 一旦我推導,我就失去了 1 個點,所以我不確定如何處理 4 個點。 我試過這個:

LUT = np.array([
    [3., 0., 0.],
    [-6.,6., 0.],
    [3.,-5., 3.],
])

t = 0.5
v_params = np.array([1, t, t**2])

P0 = np.array([0., 40., 0.])
P1 = np.array([0., 80., 0.])
P2 = np.array([100., 80., 0.])
P3 = np.array([100., 40., 0.])
points = np.array([
    P1-P0,
    P2-P1,
    P3-P2
])
out = np.dot(np.dot(v_params, LUT), points)
out /= np.linalg.norm(out)

但在 0.5 之后不起作用

也嘗試過 4d

LUT = np.array([
    [3., 0., 0., 0.],
    [-6.,6., 0., 0.],
    [3.,-5., 3., 0.],
    [0., 0., 0., 0.]
])
v_params = np.array([1, t, t**2, t**3])

假設 t^3 將被我的最后 0. 行取消,但也不起作用

所以MBo你是對的,我的LUT錯了,我想通了,我現在正在使用

 3 0 0
-6 6 0
 3 -6 3

它運行良好! 感謝您指出問題所在!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM