根據點集合畫曲線

2021-08-25 18:42:00 字數 1210 閱讀 6293

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

其中一種比較快捷的是使用貝塞爾曲線,有成熟的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方法可以直接呼叫。但是有乙個問題需要注意,就是貝塞爾曲線對點集合是有要求的,如果不滿足要求,就不會得到你想要的曲線。如何滿足要求呢,先要理解貝塞爾曲線的原理。簡單點說 貝賽爾曲線...

根據點提取柵格值

柵格資料中每乙個柵格都有乙個值,比如dem,每一格都有乙個高程值,值都是內插得出的。現在有一點集,需要根據柵格將每乙個賦上相應的柵格值。用到的工具是提取分析中的值提取至點 extractvaluestopoints 當然,如果柵格是多個柵格組成,必須還先把它們鑲嵌,使用到的工具是鑲嵌到新柵格,需要注...