数学类 sin cos
今天做了一个和数学类有关的例子:一个小球沿着一个圆的边旋转,小球发出一条射线,画出正弦的图像轨迹;
代码如下:
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);
}
}
}
浙公网安备 33010602011771号