BONKURA BLOG

仕事のメモ帳ブログ。いまのところActionScriptメイン。たまにCSSとかJavaScriptとか。

三角関数はこう使おう

三角関数の式をどういう場合の時に使うかすぐに忘れてしまうので、前に書いたかもしれませんが、もう一回メモ。

対象物への距離が分かっている場合に、その対象物との角度を調べる

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class RotateToMouse extends Sprite 
	{
		private var arrow:Arrow;
		
		public function RotateToMouse()
		{
			init();
		}
		
		private function init():void
		{
			arrow = new Arrow();
			addChild(arrow);
			arrow.x = stage.stageWidth / 2;
			arrow.y = stage.stageHeight / 2;
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function onEnterFrame(e:Event):void 
		{
			var dx:Number = mouseX - arrow.x;
			var dy:Number = mouseY - arrow.y;
			var radius:Number = Math.atan2(dy, dx);
			arrow.rotation = radius * 180 / Math.PI;
		}
	}
	
}

繰り返し運動

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class  Bobbing extends Sprite
	{
		private var ball:Ball;
		private var angle:Number = 0;
		
		public function Bobbing()
		{
			init();
		}
		
		private function init():void
		{
			ball = new Ball();
			addChild(ball);
			ball.x = stage.stageWidth / 2;
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function onEnterFrame(e:Event):void 
		{
			ball.y = stage.stageHeight / 2 + Math.sin(angle) * 50;
			angle += .1;
		}
	}
	
}
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class Pulse extends Sprite
	{
		private var ball:Ball;
		private var angle:Number = 0
		private var range:Number = .5;
		private var speed:Number = .1;
		private var centerScale:Number = 1;
		
		public function Pulse()
		{
			init();
		}
		
		private function init():void
		{
			ball = new Ball();
			addChild(ball);
			ball.x = stage.stageWidth / 2;
			ball.y = stage.stageHeight / 2;
			addEventListener(Event.ENTER_FRAME, onEnterframe);
		}
		
		private function onEnterframe(e:Event):void 
		{
			ball.scaleX = ball.scaleY = centerScale + Math.sin(angle) * range;
			angle += speed;
		}
	}
	
}

楕円運動

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class Oval extends Sprite 
	{
		private var ball:Ball;
		private var centerX:Number = 200;
		private var centerY:Number = 200;
		private var radiusX:Number = 200;
		private var radiusY:Number = 100;
		private var speed:Number = .1;
		private var angle:Number = 0;
		
		public function Oval()
		{
			init();
		}
		
		private function init():void
		{
			ball = new Ball();
			addChild(ball);
			ball.x = 0;
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function onEnterFrame(e:Event):void 
		{
			ball.x = centerX + Math.sin(angle) * radiusX;
			ball.y = centerY +Math.cos(angle) * radiusY;
			trace(ball.y);
			angle += speed;
		}
	}
	
}

二点間の距離

package 
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	
	public class MouseDistance extends Sprite 
	{
		private var sprite1:Sprite;
		private var textFiteld:TextField;
		
		public function MouseDistance()
		{
			init();
		}
		
		private function init():void
		{
			sprite1 = new Sprite();
			addChild(sprite1);
			sprite1.graphics.beginFill(0x000000);
			sprite1.graphics.drawRect( -2, -2, 4, 4);
			sprite1.graphics.endFill();
			sprite1.x = stage.stageWidth / 2;
			sprite1.y = stage.stageHeight / 2;
			
			textFiteld = new TextField();
			addChild(textFiteld);
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
		}
		
		private function onMouseMove(e:MouseEvent):void 
		{
			graphics.clear();
			graphics.lineStyle(1, 0, 1);
			graphics.moveTo(sprite1.x, sprite1.y);
			graphics.lineTo(mouseX, mouseY);
			
			var dx:Number = sprite1.x - mouseX;
			var dy:Number = sprite1.y - mouseY;
			var dist:Number = Math.sqrt(dx * dx + dy * dy);
			textFiteld.text = String(dist);
		}
	}
	
}
このエントリーをはてなブックマークに追加 Save This Page to del.icio.us