習作@101019
てっく煮ぶろぐ様より転載
http://d.hatena.ne.jp/nitoyon/20080616/as_3d_lessen1
package {
//flash.displayパッケージとflash.geomパッケージの使用
import flash.display.*;
import flash.geom.Point;
//バックグラウンドを#000にする。
[SWF(backgroundColor="0x000000")]
public class Study3d extends Sprite {
//初期座標を指定
private var p1:Point3D = new Point3D( 0, 0, 100);
private var p2:Point3D = new Point3D( 100, 0, 0);
private var p3:Point3D = new Point3D( 0, 100, 0);
private var p4:Point3D = new Point3D( -50, -50, -50);
private var canvas:Sprite = new Sprite();
public function Study3d() {
//拡大縮小を制限+スクリーンの描画場所指定
stage.scaleMode = "noScale";
stage.align ="TL";
//
addChild(canvas);
canvas.x = 150;
canvas.y = 150;
changeHandler(null);
addEventListener("enterFrame",changeHandler);
}
private function changeHandler(event:Object):void{
var pp1:Point3D = rotate(p1);
var pp2:Point3D = rotate(p2);
var pp3:Point3D = rotate(p3);
var pp4:Point3D = rotate(p4);
//動かすたびにクリアして描画が残らないようにする
canvas.graphics.clear();
drawPoint(pp1);
drawPoint(pp2);
drawPoint(pp3);
drawPoint(pp4);
drawLine(pp1,pp2);
drawLine(pp1,pp3);
drawLine(pp1,pp4);
drawLine(pp2,pp3);
drawLine(pp2,pp4);
drawLine(pp3,pp4);
}
private function drawPoint(p:Point3D):void{
//頂点の描画
canvas.graphics.beginFill(0xff00ff);
canvas.graphics.drawCircle(p.x, p.y, 10);
canvas.graphics.endFill();
}
private function drawLine(p1:Point3D,p2:Point3D):void{
//辺の描画
canvas.graphics.lineStyle(3, 0xffff00);
canvas.graphics.moveTo(p1.x,p1.y);
canvas.graphics.lineTo(p2.x,p2.y);
canvas.graphics.lineStyle();
}
private function rotate(_p:Point3D):Point3D{
var ret:Point3D = new Point3D(_p.x,_p.y,_p.z);
var p:Point;
p = rotete2d(ret.z,ret.x,stage.mouseX /180 * Math.PI);
ret.z = p.x;
ret.x = p.y;
p = rotete2d(ret.x,ret.y,stage.mouseY /180 * Math.PI);
ret.x = p.x;
ret.y = p.y;
return ret;
}
private function rotete2d(x:Number,y:Number,rad:Number):Point{
var p:Point = new Point();
p.x = Math.cos(rad)*x + Math.sin(rad)*y;
p.y = -Math.sin(rad)*x + Math.cos(rad)*y;
return p;
}
}
}
class Point3D {
public var x:Number;
public var y:Number;
public var z:Number;
public function Point3D(_x:Number = 0, _y:Number = 0, _z:Number = 0){
x = _x;
y = _y;
z = _z;
}
}