三次 Hermite曲線演算法

2021-07-27 07:41:49 字數 1292 閱讀 1075

首先,這個網上有很多相關的文章,比如

下面說,整個演算法需要注意的地方。

1) 切線的概念

切線不是斜率,可以理解為向量吧。比如p0到p1的切線就是(p1-p0)。可以標準化為單位向量。

2)簡單的切線

假如四個控制點p0,p1,p2,p3,那麼最簡單的計算p1點的切線是 p1-p0,p2的切線是p3-p2。

3)簡單切線的問題。

上訴求切線的方式是有問題的,因為p1的切線,你可以計算為(p1-p0)。如果點集反轉為p2,p1,p0,p5,那麼p1的切線又變成了(p2-p1)。所以簡單切線是有問題的。得到的結果如下圖所示。

4)調整後的切線

既然乙個點的切線可以有兩個值,那就用兩個值的平均咯。是的,就這麼簡單。同3)p1點的切線的值為(p1-p0)/2+(p2-p1)/2;

5) 整個演算法。

下面用c#實現的。

private void inithmatrix()

}

public listcomputehermite(pointf p1, pointf p2, pointf p3, pointf p4)

if (p4 == pointf.empty)

float radio1 = 0.5f;

float radio2 = 1 - radio1;

pointf k0 = new pointf(m0.x * radio1 + m2.x * radio2, m0.y * radio1 + m2.y * radio2);

pointf k1 = new pointf(m1.x * radio1 + m2.x * radio2, m1.y * radio1 + m2.y * radio2);

if (p1 == pointf.empty)

if (p4 == pointf.empty)

listitems = new list();

items.add(new pointf(p2.x, p2.y));

for (int i = 1; i < cstepcount; i++)

items.add(new pointf(p3.x, p3.y));

return items;

}

6)最後的效果

三次樣條曲線

include include using namespace std const int m 16 double dknowx m double dknowy m double dknowdy m double dknowddy m const int n 15 double dinsertx n...

三次曲線和五次曲線函式

三次曲線規劃函式 x0,x1分別為規劃起始位置和終止時刻位置,v0,v1分別為規劃起始速度和終止時刻速度 t為規劃時長,t為求解時刻 function y triple x0,x1,v0,v1,t,t a 2 x0 2 x1 v0 t v1 t t 3 b 3 x0 3 x1 2 v0 t v1 t...

分段三次Hermite插值Matlab實現

function m matrix hermite x,y,y0,yn,x value 輸入值分配,x input,y input均為陣列,y 0,y n為x 0,x n分別對應的一階導數值 x input x y input y y 0 y0 y n yn number size x input ...