⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beziertoolkit.as

📁 flash as编程的库和源代码
💻 AS
字号:
package de.alex_uhlmann.animationpackage.utility {import flash.geom.Point;/*** Offers common used methods for bezier curves.*/public class BezierToolkit {				/**	* Returns a point on a quadratic bezier curve with Robert Penner's optimization 	*				of the standard equation:	* @param targ (Number)	* @param p1 (Point)	* @param p2 (Point)	* @param p3 (Point)	*/	/*Adapted from Robert Penner.*/	public function getPointsOnQuadCurve(t:Number, p1:Point, p2:Point, p3:Point):Point {		var v:Number = t / 100;		var p:Point = new Point();		p.x = p1.x + v*(2*(1-v)*(p2.x-p1.x) + v*(p3.x - p1.x));		p.y = p1.y + v*(2*(1-v)*(p2.y-p1.y) + v*(p3.y - p1.y));			return p;	}		/**	* @param targ (Number)	* @param p1 (Point)	* @param p2 (Point)	* @param p3 (Point)	* @param p4 (Point)	*/		/*Adapted from Paul Bourke.*/	public function getPointsOnCubicCurve(targ:Number, p1:Point, p2:Point, p3:Point, p4:Point):Point {		var a:Number,b:Number,c:Number;			var v:Number = targ / 100;			a = 1 - v;		b = a * a * a;		c = v * v * v;		var p:Point = new Point();		p.x = b * p1.x + 3 * v * a * a * p2.x + 3 * v * v * a * p3.x + c * p4.x;		p.y = b * p1.y + 3 * v * a * a * p2.y + 3 * v * v * a * p3.y + c * p4.y;				return p;	}		/**	* @param targ (Number)	* @param startX (Number)	* @param startY (Number)	* @param x2 (Number)	* @param y2 (Number)	* @param endX (Number)	* @param endY (Number)	*/	/*Adapted from Robert Penner's drawCurve3Pts() method*/	public function getQuadControlPoints(startX:Number, startY:Number, 						        x2:Number, y2:Number, 						        endX:Number, endY:Number):Point {							        		var c:Point = new Point();		c.x = (2 * x2) - .5 * (startX + endX);		c.y = (2 * y2) - .5 * (startY + endY);        		return c;	}			/**	* if anybody finds a generic method to compute control points 	* for bezier curves with n control points, 	* if only the points on the curve are given, please let me know!	* @param targ (Number)	* @param startX (Number)	* @param startY (Number)	* @param throughX1 (Number)	* @param throughY1 (Number)	* @param throughX2 (Number)	* @param throughY2 (Number)	* @param endX (Number)	* @param endY (Number)	*/		public function getCubicControlPoints(startX:Number, startY:Number, 						        throughX1:Number, throughY1:Number, 									throughX2:Number, throughY2:Number, 						        endX:Number, endY:Number):Object {				var c:Object = new Object();		c.x1 = -(10 * startX - 3 * endX - 8 * (3 * throughX1 - throughX2)) / 9;		c.y1 = -(10 * startY - 3 * endY - 8 * (3 * throughY1 - throughY2)) / 9;		c.x2 = (3 * startX - 10 * endX - 8 * throughX1 + 24 * throughX2) / 9;		c.y2 = (3 * startY - 10 * endY - 8 * throughY1 + 24 * throughY2) / 9;		return c;	}		/*	* de.alex_uhlmann.animationpackage.drawing.CubicCurve needs to access this method.	* Adapted from Paul Bourke.	*/	public function getPointsOnNCurve(targ:Number, points:Array):Point {		var v:Number = targ / 100;		var k:Number, kn:Number, nn:Number, nkn:Number, blend:Number, muk:Number, munk:Number;		var p:Array = points;		var n:Number = points.length - 1;		var b:Point = new Point();		if(v != 1) {			//calculate for all control points 			//but the last point on the path			muk = 1;					munk = Math.pow(1 - v, n);					for (k = 0; k <= n; k++) {							nn = n;				kn = k;				nkn = n - k;							blend = muk * munk;							muk *= v;				munk /= (1 - v);							while (nn >= 1) {					blend *= nn;									nn--;					if (kn > 1) {						blend /= kn;						kn--;					}					if (nkn > 1) {						blend /= nkn;						nkn--;					}				}				b.x += p[k].x * blend;				b.y += p[k].y * blend;					}			return b;		} else {		//Calculate the last point 		//- it is NOT a control point			var l:Number = p.length - 1;			b.x = p[l].x;			b.y = p[l].y;			return b;		}	}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -