根據點集合畫曲線(貝塞爾)

2021-09-08 09:53:05 字數 1154 閱讀 1614

根據乙個已有的點集合,想畫出一條光滑的曲線有很多種演算法。

其中一種比較快捷的是使用貝塞爾曲線,有成熟的polybezier方法可以直接呼叫。

但是有乙個問題需要注意,就是貝塞爾曲線對點集合是有要求的,如果不滿足要求,就不會得到你想要的曲線。

如何滿足要求呢,先要理解貝塞爾曲線的原理。

簡單點說:

貝賽爾曲線的每一段曲線都要乙個起點,乙個終點,兩個控制點(用於控制曲線的弧度)。所以點陣列的記錄方式是:起點+控制點+控制點+終點+控制點+控制點+終點+……。也就是說,點的數量應該是3×n+1.

明白了道理,我們就可以修正任何乙個點陣列了,我實現的演算法如下:

//貝塞爾曲線點位修正

function adjustpointsforbezier(arrsource: tarrayofpoint): tarrayofpoint;

vari: integer;

ncount, nmod, ncountresult: integer; 

begin

ncount := high(arrsource) + 1;

//貝塞爾曲線點數為3*n+1

nmod := ncount mod 3;

if nmod = 1 then

ncountresult := ncount

else

if nmod = 2 then

ncountresult := ncount + 2

else

ncountresult := ncount + 1;

setlength(result, ncountresult);

//得到所有源點

for i := 0 to ncount - 1 do

begin

result[i].x := arrsource[i].x;

result[i].y := arrsource[i].y;

end;

//增加修正點

for i := ncount to ncountresult - 1 do

begin

result[i].x := arrsource[ncount - 1].x;

result[i].y := arrsource[ncount - 1].y;

end;

end; 

根據點集合畫曲線

根據乙個已有的點集合,想畫出一條光滑的曲線有很多種演算法。其中一種比較快捷的是使用貝塞爾曲線,有成熟的polybezier方法可以直接呼叫。但是有乙個問題需要注意,就是貝塞爾曲線對點集合是有要求的,如果不滿足要求,就不會得到你想要的曲線。如何滿足要求呢,先要理解貝塞爾曲線的原理。簡單點說 貝賽爾曲線...

根據點集合畫曲線

根據乙個已有的點集合,想畫出一條光滑的曲線有很多種演算法。其中一種比較快捷的是使用貝塞爾曲線,有成熟的polybezier方法可以直接呼叫。但是有乙個問題需要注意,就是貝塞爾曲線對點集合是有要求的,如果不滿足要求,就不會得到你想要的曲線。如何滿足要求呢,先要理解貝塞爾曲線的原理。簡單點說 貝賽爾曲線...

MatLab畫貝塞爾函式曲線

第一類貝塞爾函式 在matlab 中用besselj nu,z 來表示 用matlab 的 是 clear clc format long x 0 0.01 20 y 0 besselj 0,x y 1 besselj 1,x y 2 besselj 2,x plot x,y 0,x,y 1,x,y...