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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章