今天做了一个和数学类有关的例子:一个小球沿着一个圆的边旋转,小球发出一条射线,画出正弦的图像轨迹;
代码如下:
package{ //导入需要的类 //基类 import flash.display.Sprite; //用于绘图 import flash.display.Shape; //需要ENTER_FRAME事件 import flash.events.Event; //定义类 public class wave extends Sprite{ //定义属性 //坐标系左侧做圆周运动的圆 private var circle:Shape=new Shape(); //动态绘制正弦曲线 private var sinLine:Shape=new Shape(); //由圆向右绘制的水平线 private var horiLine:Shape=new Shape(); //由圆向x轴绘制的竖直线 private var verLine:Shape=new Shape(); //半径 private const r:Number=100; //角度(绘图的主要依据) private var angle:Number=0; //构造函数,设置4个Shape实例并添加到显示列表 public function wave(){ circle.graphics.beginFill(0xFF00FF,.5); circle.graphics.drawCircle(0,0,10); circle.graphics.endFill(); sinLine.graphics.lineStyle(2,0xFF0000); addChild(circle); addChild(sinLine); addChild(horiLine); addChild(verLine); } //触发绘图 public function run(){ circle.addEventListener(Event.ENTER_FRAME,circleEnter); } //停止绘图 public function hold(){ circle.removeEventListener(Event.ENTER_FRAME,circleEnter); } //停止绘图,重置变量和4个Shape实例 public function reset(){ hold(); angle=0; circle.x=circle.y=0; sinLine.graphics.clear(); sinLine.graphics.lineStyle(2,0xFF0000); horiLine.graphics.clear(); verLine.graphics.clear(); } //实现具体绘图过程 private function circleEnter(e:Event){ //递增角度,计算并更改小圆当前位置——让小圆做圆周运动 angle+=2; var tempx:Number=-r+r*Math.cos(angle*Math.PI/180); var tempy:Number=-r*Math.sin(angle*Math.PI/180); circle.x=tempx; circle.y=tempy; //根据角度和小圆的纵坐标绘制直线段——正弦函数曲线的微小片断 sinLine.graphics.lineTo(angle,circle.y); //绘制连接小圆和sinLine当前点的水平线 horiLine.graphics.clear(); horiLine.graphics.lineStyle(1,0x00FF00,.5); horiLine.graphics.moveTo(circle.x,circle.y); horiLine.graphics.lineTo(angle,circle.y); //绘制连接小圆向x轴的垂直线 verLine.graphics.clear(); verLine.graphics.lineStyle(1,0x0000FF,.5); verLine.graphics.moveTo(circle.x,circle.y); verLine.graphics.lineTo(circle.x,0); } } }