[ActionScript 3.0] AS3 绘制正四面体(线条)

 1 package
 2 {
 3     import flash.display.MovieClip;
 4     import flash.display.Sprite;
 5     import flash.events.Event;
 6     import flash.geom.Point;
 7     import flash.geom.Vector3D;
 8
 9     /**
10      * @author Frost.Yen
11      * @E-mail [email protected]
12      * @create 2015-9-8 上午11:03:11
13      *
14      */
15     [SWF(width="800",height="600")]
16     public class LineTetrahedron extends Sprite
17     {
18         private var _faceArr:Array = [];
19         private var _r:Number = 50;//顶点在各轴上的投影值
20         private var _focus:Number = 200;//焦距
21         private var _lineContainer:Sprite;
22         private var _container:Sprite;
23         private var _vertexArr:Array = [{x:-_r,y:_r,z:-_r},{x:_r,y:_r,z:_r},{x:-_r,y:-_r,z:_r},{x:_r,y:-_r,z:-_r}];
24         public function LineTetrahedron()
25         {
26             initViews();
27             initEventListeners();
28         }
29         private function initViews():void
30         {
31             _container = new Sprite();
32             _lineContainer = new Sprite();
33             _container.x = _lineContainer.x = 400;
34             _container.y = _lineContainer.y = 300;
35             this.addChild(_container);
36             this.addChild(_lineContainer);
37             createFace();
38
39         }
40         private function initEventListeners():void
41         {
42             this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
43         }
44         private function onEnterFrame(e:Event):void
45         {
46             for (var i:int=0; i<_faceArr.length; i++)
47             {
48                 _faceArr[i].transform.matrix3D.appendRotation((mouseX-_lineContainer.x)/50,Vector3D.Y_AXIS);
49                 _faceArr[i].transform.matrix3D.appendRotation((mouseY-_lineContainer.y)/50,Vector3D.X_AXIS);
50                 _faceArr[i].Z = (_faceArr[i] as MovieClip).transform.getRelativeMatrix3D(_container).position.z;
51                 _faceArr[i].X = (_faceArr[i] as MovieClip).transform.getRelativeMatrix3D(_container).position.x*(_focus/(_focus+_faceArr[i].Z));
52                 _faceArr[i].Y = (_faceArr[i] as MovieClip).transform.getRelativeMatrix3D(_container).position.y*(_focus/(_focus+_faceArr[i].Z));
53                 //利用焦距实现透视
54             }
55             _lineContainer.graphics.clear();
56             _lineContainer.graphics.lineStyle(3,0x00ffff);
57             _lineContainer.graphics.moveTo(_faceArr[0].X,_faceArr[0].Y);
58             _lineContainer.graphics.lineTo(_faceArr[1].X,_faceArr[1].Y);
59             _lineContainer.graphics.lineTo(_faceArr[2].X,_faceArr[2].Y);
60             _lineContainer.graphics.lineTo(_faceArr[0].X,_faceArr[0].Y);
61             _lineContainer.graphics.lineTo(_faceArr[3].X,_faceArr[3].Y);
62             _lineContainer.graphics.lineTo(_faceArr[1].X,_faceArr[1].Y);
63             _lineContainer.graphics.moveTo(_faceArr[3].X,_faceArr[3].Y);
64             _lineContainer.graphics.lineTo(_faceArr[2].X,_faceArr[2].Y);
65         }
66         private function createFace():void
67         {
68             for(var i:int = 0;i<4;i++){
69                 var mc:MovieClip = new MovieClip();
70                 _container.addChild(mc);
71                 _faceArr.push(mc);
72                 mc.x = _vertexArr[i].x;
73                 mc.y = _vertexArr[i].y;
74                 mc.z = _vertexArr[i].z;
75             }
76         }
77     }
78 }
时间: 2024-12-15 19:43:15

[ActionScript 3.0] AS3 绘制正四面体(线条)的相关文章

[ActionScript 3.0] AS3 绘制正八面体(线条)

分析: 将八面体置于3D坐标系中,其中心的坐标位于原点(0,0,0),让八面体的六个顶点恰好位于3D坐标系的x轴.y轴和z轴上,则从八面体的中心到这六个顶点的距离是相等的.我们可以假设这个距离为r,则六个顶点的坐标分别为上(0,-r,0).下(0,r,0).四周:左(-r,0,0).右(r,0,0).前(0,0,-r).后(0,0,r). 1 package 2 { 3 import flash.display.MovieClip; 4 import flash.display.Sprite;

[ActionScript 3.0] AS3 绘制立方体

1 package 2 { 3 import flash.display.Sprite; 4 import flash.events.Event; 5 import flash.geom.Vector3D; 6 import flash.text.TextField; 7 import flash.text.TextFormat; 8 9 /** 10 * @author Frost.Yen 11 * @E-mail [email protected] 12 * @create 2015-9-2

[ActionScript 3.0] AS3 绘制星形

1 package 2 { 3 import flash.display.Sprite; 4 import flash.events.Event; 5 6 /** 7 * @author Frost.Yen 8 * @E-mail [email protected] 9 * @create 2015-9-9 下午4:47:50 10 * 11 */ 12 [SWF(width="1024",height="1024",frameRate="5")

[ActionScript 3.0] AS3 绘制任意三角形任意顶点到对边的高

注:顶点坐标可以点击 1 package 2 { 3 import flash.display.Shape; 4 import flash.display.Sprite; 5 import flash.events.MouseEvent; 6 import flash.geom.Point; 7 import flash.text.TextField; 8 9 /** 10 * @author Frost.Yen 11 * @E-mail [email protected] 12 * @crea

[ActionScript 3.0] as3处理xml的功能和遍历节点

as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象时,ActionScript 会分析数据并将其分层结构加载到内存(如果 XML 数据格式有误,它会发送运行时错误). 利用 XML 和 XMLList 对象的运算符和方法可以轻松遍历 XML 数据的结构. 1.读取外部 XML 文档 可以使用 URLLoader 类从 URL 加载 XML 数据.若

[ActionScript 3.0] AS3虚线绘制方法

import flash.geom.Point; import flash.display.MovieClip; import flash.display.Graphics; var mc:MovieClip=new MovieClip(); addChild(mc); drawDashed(mc,new Point(100,100),new Point(500,100),5,5); function drawDashed(mc:Sprite,p1:Point,p2:Point,length:N

[ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains

简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时候,默认的设置工作的很好,你甚至不知道他们的存在. 但是某些时候你可能需要控制默认设置以外的更多行为和功能,这样你就会遇到前面所说的问题.你也许会困扰于Security.allowDomain和crossdomain.xml文件的区别,又或者你想要深究关于安全性的最佳实践.如果是这样,那么这篇文章就

[ActionScript 3.0] AS3.0和AS2.0的相互通信

AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) { var param = "this message is from as2"; var caller:LocalConnection = new LocalConnection(); caller.send("AS2 send to AS3","funI

[ActionScript 3.0] AS3 3D双圆环贴图

1 package 2 { 3 import flash.display.Bitmap; 4 import flash.display.BitmapData; 5 import flash.display.MovieClip; 6 import flash.display.Sprite; 7 import flash.display.TriangleCulling; 8 import flash.events.Event; 9 import flash.geom.ColorTransform;