在上面几节当中,已经了解过计算圆上任意一点的切线的方法,我们首先知道使用导数几何意义在哪里?在我们高中数学和大学的数学当中,说明了。导数的几何意义函数y=f(x)在点x0处导数为f'(x0)在几何上表示曲线y=f(x)在点M(x0,f(x0))处的切线斜率
即
f’(x0)=tana,其中a是切线的倾角。
我们借用这种概念,结合我们编程当中使用,例如,我们需要对一个图形进行按圆形分布。情况如下,但是使用导数之后,将图形变化成另外一种情况。
他们看起来分布情况位置是一样的,但是他们角度偏移并不是一样,看起来会多一种的形态。然后我们为他们添加一种运动方式---圆周运动。让他们看起来运动效果不一样。
下面我们进行一次快速尝试,这种只是一个实现,同样尝试一下Math2类的使用。这个类封装如下,它可以为我们创作带来一定帮助。
在这里我添加几种导数求法,其中一个做圆形分布的时候,另外一个是正弦和余弦分布情况。你可以增加更加功能进去。或者使用我给你提供的简单方法。
//一些数学方面的计算计算工具类 //author 夏天的树人 package org.summerTree.math { public final class Math2 { /*求出圆的任意角度切线的倾斜角 * */ public static function getCircle_K(angle:Number,R:Number=1):Number { var px:Number=R * Math.cos(angle); var py:Number=R * Math.sin(angle); var k:Number=- px / py; return Math.atan(k) * 180 / Math.PI; } //正弦曲线y=sinx的导数,求切线的倾斜角 private static function getSinLine_K(angle:Number):Number { //正弦曲线的sin导数 var cos_daoshu:Number=Math.cos(angle); return Math.atan(cos_daoshu) * 180 / Math.PI; } //余弦曲线y=cosx的导数 private static function getCosLine_K(angle:Number):Number { //正弦曲线的sin导数 var sin_daoshu:Number=- Math.sin(angle); return Math.atan(sin_daoshu) * 180 / Math.PI; } } }
简单的测试:
import org.summerTree.math.Math2; var list:Array=new Array(); var angleList:Array=new Array(); var angle:Number=0; sort(); function sort():void { var perAngle:Number=2*Math.PI/10; for (var j:int=0; j<10; j++) { var image:Sprite=new Sprite(); addChild(image); image.graphics.lineStyle(1); image.graphics.beginFill(0x00ff00); image.graphics.drawRect(-15,-15,30,30);//把图片的注册点设置在中心位置 image.graphics.endFill(); image.x=250+ 100*Math.cos(j*perAngle); image.y=200+ 100*Math.sin(j*perAngle); angleList.push(j*perAngle); image.rotation=Math2.getCircle_K(j*perAngle);//设置切线的角度 list.push(image); } } stage.addEventListener(Event.ENTER_FRAME,Run); function Run(event:Event):void { //角速度圆周运动 angle+=2; for (var i:int=0; i<10; i++) { var temp:Number=angleList[i]+angle*Math.PI/180; list[i].x=250+ 100*Math.cos(temp); list[i].y=200+ 100*Math.sin(temp); list[i].rotation=Math2.getCircle_K(temp); } }