Flash与数学: 正弦曲线
???????????? 最近因为一个需求和一个做媒体互动朋友讨论这个高中的数学,术业有专攻,工作中不知不觉早已经忘记了不少。幸好朋友提点到这个数学点,我发现有不少的用处可以结合到flash里面使用,过去对这条公式不理解现在开始慢慢了解他的用途。特别对做媒体互动和做游戏都有很不错的使用。 具体的知识点可以参考百度百科 ? http://baike.baidu.com/view/982354.htm? 这个地方有着很不错的专业知识群体编辑这些。有时候挺方便了解一些遗忘的知识点。 ? ? 下面做一个实验,这个程序来源于这个媒体互动的朋友:主要用到/正弦曲线公式:y=Asin(ωx+φ)+k ? 步骤一:创建一个元件 ?注:Ball 是一个flash里面自创建的元件,文档类:800x400 ? ? 步骤二:创建一组小球并对其进行分布 var num:int = 60; var A:int = 50; var startX:int = 10; var startY:int = 150; var balls:Array = []; for (var i:int=0; i<num; i++) { var ball:Ball=new Ball(); addChild(ball); var px:int = startX + i * ball.width; var py:int=startY+Math.sin(px*Math.PI/180)*A; ball.x = px; ball.y = py; balls.push(ball); }
步骤三:创建简单的交互 import flash.events.MouseEvent; //正弦曲线可表示为y=Asin(ωx+φ)+k var num:int = 60; var A:int = 50; var startX:int = 10; var startY:int = 150; var balls:Array = []; for (var i:int=0; i<num; i++) { var ball:Ball=new Ball(); addChild(ball); var px:int = startX + i * ball.width; var py:int=startY+Math.sin(px*Math.PI/180)*A; ball.x = px; ball.y = py; balls.push(ball); } stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler); function onMouseMoveHandler(event:MouseEvent):void { for (var j:int=0; j<balls.length; j++) { var ball:Ball = balls[j]; var px:int = startX + j * ball.width; var py:int=startY+Math.sin(px*Math.PI/180+stage.mouseX*Math.PI/180)*A; ball.x = px; ball.y = py; } }
公式:?/正弦曲线y=Asin(ωx+φ)+k 这条公式。(对小球分布和移动做了一个解析工作)。 交互:?我们移动一下鼠标,通过改变mouseX的值,让这条曲线产生左右移动的效果。 ? 设置A 可以对振幅有不同高度,k 可以对曲线产生不同的上下移动的效果。 ? ? ?修改一下代码,改变一下交互的使用会是怎样? 它的核心本质还没有离开到公式的使用。 ? import flash.events.MouseEvent; import flash.geom.Point; //正弦曲线可表示为y=Asin(ωx+φ)+k var num:int = 60; var A:int = 50; var startX:int = 10; var startY:int = 150; var balls:Array = []; for (var i:int=0; i<num; i++) { var ball:Ball=new Ball(); addChild(ball); var px:int = startX + i * ball.width; var py:int=startY+Math.sin(px*Math.PI/180)*A; ball.x = px; ball.y = py; balls.push(ball); } stage.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler); stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUpHandler); var oldPoint:Point=new Point(); var newPoint:Point=new Point(); function onMouseDownHandler(event:MouseEvent):void { oldPoint.x=mouseX; oldPoint.y=mouseY;//= new Point(mouseX,mouseY); stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler); } function onMouseUpHandler(event:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler); } function onMouseMoveHandler(event:MouseEvent):void { newPoint.x=mouseX; newPoint.y=mouseY; var distance:int=newPoint.x-oldPoint.x;//新点减去旧点的差值 moveBall(distance); } function moveBall(distan:int):void { for (var j:int=0; j<balls.length; j++) { var ball:Ball = balls[j]; var px:int = startX + j * ball.width; var py:int=startY+Math.sin(px*Math.PI/180+distan*Math.PI/180)*A; ball.x = px; ball.y = py; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |