求B樣條曲線各個點座標及C 實現

2021-09-26 19:49:21 字數 1903 閱讀 9645

功能:根據引數u值和k(大小為階數值)與節點向量,計算第i個k次b樣條基數

輸入引數: u—引數值;k—大小值為階數;i—第i個k次b樣條的支撐區間左端節點的下標;anode為節點向量。

輸出引數:返回函式值。

double getbasefunval(double u, int i, int k, vector m_anode)

}if (k>0)

else

else

alpha = (u - m_anode[i])/dtemp;

dtemp = m_anode[i+k+1] - m_anode[i+1];

if (dtemp == 0.0)

beta = 0.0;

else

beta = (m_anode[i+k+1] - u)/dtemp;

val1 = alpha * getbasefunval(u, i, k-1, m_anode);

val2 = beta * getbasefunval(u, i+1, k-1, m_anode);

val = val1 + val2;

}

}

return val;

}上述功能模組摘自於計算機輔助幾何設計與非均勻有理b樣條。已知b樣條的n+1控制點座標,以及相應的節點向量,可求得對應的曲線方程。

先計算各個控制點的基函式

各個基函式的求解可根據上述的功能模組求出。

下面是我的c++實現:曲線是二維的,三維的情況,就z座標做同x,y求解方式相同即可。在求解的過程中,我自己在cad上畫了個樣條曲線,然後通過getbasefunval(double u, int i, int k, vector m_anode)和頂點座標,及節點向量求各個點的座標。隨著u值的變化,計算各個x,y,z值。乙個星期的摸爬滾打中,能輸出圖形,但是與原來的圖形對應不上。最終找到的原因在與基函式出問題了。在書本等相關資源中,基函式成員中的k表示的是次數,在我畫的樣條曲線中,階數顯示為3(為什麼是3?cad的標註裡,實體塊中的 70 下一行,為3),所以我理所當然的寫為了2,。一直有問題。我將它改為3以後,竟然奇蹟般的可以用了。而且跟原來圖形吻合。這個是我的相關經歷,希望對你們能有用。另外,哪位熱心人士可以說明下,為什麼k改為階數大小,就可以呢?

#include #include #include using namespace std;

struct tpoint

;double getbasefunval(double u, int i, int k, vector m_anode)

}if (k>0)

else

else

alpha = (u - m_anode[i])/dtemp;

dtemp = m_anode[i+k+1] - m_anode[i+1];

if (dtemp == 0.0)

else

beta = (m_anode[i+k+1] - u)/dtemp;

val1 = alpha * getbasefunval(u, i, k-1, m_anode);

val2 = beta * getbasefunval(u, i+1, k-1, m_anode);

val = val1 + val2;}}

return val;

}int main()

char *file = "c:/users/monkey/desktop/新建資料夾 (2)/test/last.txt";

ofstream out(file);

if (!out)

for (int n = 0; n < vtdata.size(); n++)

out.close();

return 0;

}

樣條曲線反求控制點

對於開曲線,關於首末端點條件,採用了兩種演算法進行比對 端點切矢,自由端點。下面只介紹核心部分,其他參考教材即可。測試思路 1 根據型值點求出控制點 2 由型值點在autocad畫出圖形輸出dxf檔案 3 將 1 求出的控制點在 2 中新增進去,用於和cad計算的結果做比對。一 端點切矢法 最主要的...

樣條曲線 B樣條曲線求解及C 實現

功能 根據引數u值和k 大小為階數值 與節點向量,計算第i個k次b樣條基數 輸入引數 u 引數值 k 大小值為階數 i 第i個k次b樣條的支撐區間左端節點的下標 anode為節點向量。輸出引數 返回函式值。double getbasefunval double u,int i,int k,vecto...

b樣條和三次樣條 樣條曲線

最近在學習軌跡規劃中的軌跡生成,涉及到樣條曲線方面的知識,總結一下。曲線的平滑性和相應的平滑性的評判準則相關,在 1 中,作者採用曲率的平方和曲率導數的平方作為評判準則 其中 是路徑點的方向角。最小化這兩個準則的軌跡分別是圓弧和三階螺旋線,並對在對稱和不對稱情況下如何生成路徑進行了分析,事實表明三階...