`
阅读更多

http://bbs.9ria.com/viewthread.php?tid=103262&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

 

最近做的项目要用到曲线方程,从c++扒出来的 曲线方程 里面 还有优化的地方 要用的朋友自己优化 去。  berzier.swf (1.98 KB) 

  1. /********************************
  2. * 项  目:Bezier
  3. * 包  名:
  4. 文件名:Bezier.as
  5. * 功  能:
  6. * 创建者:rui
  7. * 修改者:
  8. * 修改目的: 
  9. * 创建日期:2011-11-82010-11-15
  10. ********************************/
  11. package 
  12. {
  13.         import flash.geom.Point;
  14.         
  15.         public class Bezi
  16.         {
  17.                 public function Bezi()
  18.                 {
  19.                 }                
  20.                 /**
  21.                  * 在贝尔曲线上的点 
  22.                  * @param cp 对应的四个控制点
  23.                  * @param t         t為參數值,0 <= t <= 1
  24.                  * @return 
  25.                  * 
  26.                  */                
  27.                 private static function pointOnCubicBezier(cp:Vector.<Point>, t:Number ):Point
  28.                 {
  29.                         var  ax:Number, bx:Number, cx:Number;
  30.                         var  ay:Number, by:Number, cy:Number;
  31.                         var  tSquared:Number, tCubed:Number;
  32.                         var  result:Point = new Point();;
  33.                         
  34.                         // 计算对应的多项式系数点
  35.                         cx = 3.0 * (cp[1].x - cp[0].x);
  36.                         bx = 3.0 * (cp[2].x - cp[1].x) - cx;
  37.                         ax = cp[3].x - cp[0].x - cx - bx;
  38.                         
  39.                         cy = 3.0 * (cp[1].y - cp[0].y);
  40.                         by = 3.0 * (cp[2].y - cp[1].y) - cy;
  41.                         ay = cp[3].y - cp[0].y - cy - by;
  42.                         
  43.                         //对应参数t 对应的曲线点
  44.                         tSquared = t * t;
  45.                         tCubed = tSquared * t;
  46.                         
  47.                         result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
  48.                         result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;
  49.                         
  50.                         return result;
  51.                 }
  52.                 /**
  53.                  * 生成 贝尔曲线的对应 point
  54.                  * @param cp 生成曲线的对应的四个贝尔曲线控制点
  55.                  * @param pointSize 要生成多少个点
  56.                  * @return 
  57.                  * 
  58.                  */                
  59.                 public static function computeBezier(cp:Vector.<Point>,pointSize:int=10):Vector.<Point>
  60.                 {
  61.                         var   dt:Number;
  62.                         var   i:int;
  63.                         var   curve:Vector.<Point> = new Vector.<Point>();
  64.                         dt = 1.0 /(pointSize-1);
  65.                         for( i = 0; i < pointSize; i++)
  66.                         {                        
  67.                                 curve.push(pointOnCubicBezier(cp,dt*Number(i)));
  68.                         }
  69.                         return curve;
  70.                 }
  71.         }
  72. }
复制代码
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics