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

时间:2022-11-29 05:48:06

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

转自: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. }