绘制多条平滑曲线(基于二次贝塞尔曲线)

绘制策略:在每两对点之间,加入一个新点(中间点)放在这两点的正中间。然后使用这些中间点作为起点和终点,而把最初的那些点(原始点)作为控制点。 

转自:http://dishell.iteye.com/blog/504440

之前使用二次贝塞尔曲线绘制两点的策略是已知的两点作为起始点和终点,然后求出这两点的中点作为控制点来绘制,结果曲线的圆滑程度不符合我所要求,之后使用上面的策略,曲线平滑程度得到了改善。

Java代码   收藏代码
  1. package  
  2. {  
  3.     import flash.display.Sprite;  
  4.     import flash.events.MouseEvent;  
  5.       
  6.     public class MultiCurves3 extends Sprite  
  7.     {  
  8.         private var numPoints:uint = 9;  
  9.         public function MultiCurves3()  
  10.         {  
  11.             init();  
  12.         }  
  13.           
  14.         private function init():void  
  15.         {  
  16.             var points:Array = new Array();  
  17.             for (var i:int = 0; i < numPoints; i++)  
  18.             {  
  19.                 points[i] = new Object();  
  20.                 points[i].x = Math.random() * stage.stageHeight;  
  21.                 points[i].y = Math.random() * stage.stageHeight;  
  22.             }  
  23.               
  24.             // find the first midpoint and move to it  
  25.             var xc1:Number = (points[0].x + points[numPoints - 1].x) / 2;  
  26.             var yc1:Number = (points[0].y + points[numPoints - 1].y) / 2;  
  27.             graphics.lineStyle(1);  
  28.             graphics.moveTo(xc1, yc1);  
  29.   
  30.             // curve through the rest, stopping at midpoints  
  31.             for (i = 0; i < numPoints - 1; i ++)  
  32.             {  
  33.                 var xc:Number = (points[i].x + points[i + 1].x) / 2;  
  34.                 var yc:Number = (points[i].y + points[i + 1].y) / 2;  
  35.                 graphics.curveTo(points[i].x, points[i].y, xc, yc);  
  36.             }  
  37.               
  38.             // curve through the last point, back to the first midpoint  
  39.             graphics.curveTo(points[i].x, points[i].y, xc1, yc1);  
  40.         }  
  41.     }  
  42. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值