flash中如何通過多點繪製光滑曲線

[1b]問題:有n個隨機點,需要用光滑曲線將起連接起來,曲線看上去要有一定的曲度?[/1b]
[1b]思路1:[/1b]從第一個點穿過第二個點到第三個點繪製曲線,然後再穿過第四個點到第五個點繪製曲線,穿過第六個點到第七個點。。。這樣可以看出來,點的個數n比爲奇數,纔可以畫到終點,暫設置n=9。
var numPoints = n;//n必爲奇數,暫設爲9
//創建隨機點構成的一個數組
var points:Array = new Array();
for(var i=0;i
[1b]思路2:[/1b]在每兩個點之間插入一個新的點,位於原兩點之間,用所插入的點爲每條曲線的起始點和終點,用原來的點作爲控制點畫曲線,這樣沒有點的個數必爲奇數的限制,且畫出來的曲線比第一種方法的曲線更加“好看”。如下圖:
[img]/uploads/allimg/080624/1111110.jpg[/img]
空心白點爲原來的點,黑色實心點爲插入的新點(圖片來源:
[url=http://lovejulia.cn/blog/article.asp?id=107]http://lovejulia.cn/blog/article.asp?id=107[/url]
,參考:
[url=http://lovejulia.cn/blog/article.asp?id=107]http://lovejulia.cn/blog/article.asp?id=107[/url]

[url=http://blog.sina.com.cn/s/blog_3ecb9b1101008z9g.html]http://blog.sina.com.cn/s/blog_3ecb9b1101008z9g.html[/url]

從圖上看出,第一個插入的點,與最後一個插入的點沒有用到,也就是說沒有用來作爲任何控點和終點,所以只需要在第二個點和倒數第二個點之間插入新點,算法如下:
var numPoints = n;
var points:Array = new Array();
for(var i=0;i[1b]總結:[/1b]思路1中是經過每個原始點畫曲線,但必須要求點的個數爲奇數,且最小給定點個數爲 三,畫出來的曲線可以看出明顯的銜接,曲度不夠,不是要求的曲線;思路2中的曲線只是經過了第一個點和最後一個點,中間的點是根據原有點來插入的點,也就 是說並沒有經過給出的點,而是經過由給出點所得出的新點,這種方法得出的曲線沒有點數必爲奇數的限制,且曲度也可以達到要求。
本文轉自:http://www.5uflash.com/flashjiaocheng/Flashdonghuajiaocheng/3449.html
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 1656
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章