http://bbs.9ria.com/viewthread.php?tid=103262&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000 最近做的项目要用到曲线方程,从c++扒出来的 曲线方程 里面 还有优化的地方 要用的朋友自己优化 去。 berzier.swf (1.98 KB) /********************************* 项 目:Bezier* 包 名:* 文件名:Bezier.as* 功 能:* 创建者:rui* 修改者:* 修改目的: * 创建日期:2011-11-82010-11-15********************************/package { import flash.geom.Point; public class Bezi { public function Bezi() { } /** * 在贝尔曲线上的点 * @param cp 对应的四个控制点 * @param t t為參數值,0 <= t <= 1 * @return * */ private static function pointOnCubicBezier(cp:Vector.<Point>, t:Number ):Point { var ax:Number, bx:Number, cx:Number; var ay:Number, by:Number, cy:Number; var tSquared:Number, tCubed:Number; var result:Point = new Point();; // 计算对应的多项式系数点 cx = 3.0 * (cp[1].x - cp[0].x); bx = 3.0 * (cp[2].x - cp[1].x) - cx; ax = cp[3].x - cp[0].x - cx - bx; cy = 3.0 * (cp[1].y - cp[0].y); by = 3.0 * (cp[2].y - cp[1].y) - cy; ay = cp[3].y - cp[0].y - cy - by; //对应参数t 对应的曲线点 tSquared = t * t; tCubed = tSquared * t; result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x; result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y; return result; } /** * 生成 贝尔曲线的对应 point * @param cp 生成曲线的对应的四个贝尔曲线控制点 * @param pointSize 要生成多少个点 * @return * */ public static function computeBezier(cp:Vector.<Point>,pointSize:int=10):Vector.<Point> { var dt:Number; var i:int; var curve:Vector.<Point> = new Vector.<Point>(); dt = 1.0 /(pointSize-1); for( i = 0; i < pointSize; i++) { curve.push(pointOnCubicBezier(cp,dt*Number(i))); } return curve; } }} 复制代码