回転行列
♥0 |
Line 68 |
Modified 2011-04-02 17:52:11 |
MIT License
archived:2017-03-20 01:00:45
ActionScript3 source code
/**
* Copyright Ryogo_Quberey ( http://wonderfl.net/user/Ryogo_Quberey )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/tmMh
*/
//http://blog.azzip-azzip.com/ より
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.*;
/**
* ...
* @author
*
* 回転行列の勉強
*
*/
public class Test06 extends Sprite
{
//回るスピード
private const _ANGLE:Number = 0.01;
//半径
private const _RADIUS:uint = 180;
//ballの数
private const _NUM:uint = 20;
//ballクラスからインスタンスの生成
private var ball:Ball;
//配列用のVector
private var _ballList:Vector.<Ball>;
private var tf:TextField;
private var tfmt:TextFormat;
/**
* コンストラクタ
*/
public function Test06():void
{
init();
}
/**
* init
*/
private function init():void
{
_ballList = new Vector.<Ball>();
for (var i: int = 0; i < _NUM; i++)
{
//オブジェクトを円環状にならべて配列に格納
var angle:Number = (360 * (i / 20)) * Math.PI/180;
ball = new Ball(8,Math.random() * 0xFFFFFF);
ball.x = stage.stageWidth / 2 + _RADIUS * Math.cos(angle);
ball.y = stage.stageHeight / 2 + _RADIUS * Math.sin(angle);
addChild(ball);
_ballList.push(ball);
}
//enterFrame
addEventListener(Event.ENTER_FRAME, enterHandler);
}
/**
* 回転行列の公式
*/
private function enterHandler(e:Event):void
{
//角度の計算
var cos:Number = Math.cos(_ANGLE);
var sin:Number = Math.sin(_ANGLE);
for (var i: int = 0; i < _NUM; i++)
{
//回転させる円の中心点からオブジェクトの距離を計算
var dx:Number = _ballList[i].x - stage.stageWidth / 2;
var dy:Number = _ballList[i].y - stage.stageHeight / 2;
//回転行列
var x1:Number = cos * dx - sin * dy;
var y1:Number = cos * dy + sin * dx;
//プロパティに割り当てる
_ballList[i].x = stage.stageWidth / 2 + x1;
_ballList[i].y = stage.stageHeight / 2 + y1;
}
}
}
}
import flash.display.Sprite;
class Ball extends Sprite
{
public var rot:Number =0;
public var vx:Number = Math.cos(rot * Math.PI / 180)*40 ;
public var vy:Number = Math.sin(rot* Math.PI / 180)*40 ;
public var mass:Number = 3;
public var radius:Number = 30
public var color:uint = 0xFF0000;
public function Ball(r:Number = 10, c:uint = 0x11FFCC)
{
radius = r;
color = c;
graphics.beginFill(c);
graphics.drawCircle(0, 0, r);
graphics.endFill();
}
}