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 871979853@qq.com
  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. }

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

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

    分析: 将八面体置于3D坐标系中,其中心的坐标位于原点(0,0,0),让八面体的六个顶点恰好位于3D坐标系的x轴.y轴和z轴上,则从八面体的中心到这六个顶点的距离是相等的.我们可以假设这个距离为r,则 ...

  2. [ActionScript 3.0] AS3 绘制正二十面体(线条)

    分析: 正二十面体共有12个顶点.30条棱,其20个面都是正三角形.每条棱所对应的弧度值为1.1071487177940904弧度,这个弧度值可通过求Math.sqrt(5)/5的反余弦值求得.正二十 ...

  3. [ActionScript 3.0] AS3 绘制星形

    package { import flash.display.Sprite; import flash.events.Event; /** * @author Frost.Yen * @E-mail ...

  4. [ActionScript 3.0] AS3 绘制12面体

    package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; im ...

  5. [ActionScript 3.0] AS3 绘制立方体

    package { import flash.display.Sprite; import flash.events.Event; import flash.geom.Vector3D; import ...

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

    注:顶点坐标可以点击 package { import flash.display.Shape; import flash.display.Sprite; import flash.events.Mo ...

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

    as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...

  8. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  9. [ActionScript 3.0] AS3虚线绘制方法

    import flash.geom.Point; import flash.display.MovieClip; import flash.display.Graphics; var mc:Movie ...

随机推荐

  1. fork炸弹

    众所周知,bash是一款极其强大的shell,提供了强大的交互与编程功能.这样的一款shell中自然不会缺少“函数”这个元素来帮助程序进行 模块化的高效开发与管理.于是产生了由于其特殊的特性,bash ...

  2. 【转】Android中JNI的使用方法

    Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...

  3. 【转】php利用mkdir创建多级目录

    先介绍一下 mkdir() 这个函数: mkdir($path,0777,true); 第一个参数:必须,代表要创建的多级目录的路径: 第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访 ...

  4. comet基于HTTP长连接技术(java即时通信,推送技术详解)

    服务器推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息,服务器发送一批数据,浏览器显示消息,同时保证与服务器的连接,当服务器需要再一次的发送数据,浏览器显示数据并保持连接. comet基 ...

  5. java连接SQLserver

    1.pom.xml添加: <dependency>            <groupId>com.hynnet</groupId>            < ...

  6. 导入和导出表空间:复制文件比mysqldump&restore快

    #生成测试数据server1:mysql> CREATE TABLE test (c1 INT PRIMARY KEY)engine = innodb;Query OK, 0 rows affe ...

  7. 在Ext JS 5应用程序中如何使用路由

    简介 Ext JS 5是一个重要的发布版本,它提供了许多新特性来创建丰富的.企业级的Web应用程序.MVVM和双向数据绑定为开发人员承担了大量的繁重工作.在Ext JS 5种,另一个新特性就是路由,它 ...

  8. 【redis】 linux 下redis 集群环境搭建

    Redis集群 (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 127.0.0.1:63791 ...

  9. 关于Action<T> 、Func<T>、EventHandler<T>、event、delegate

    c# 最初的时候 只有 delegate,之后的版本封装了Action<T> .Func<T>.EventHandler<T> 关于Action<T>  ...

  10. 通信原理读书笔记:常规AM调制的功率

    Proakis,通信系统原理,p101: 两个不同频率正弦和的功率为其功率的和. 计算功率时,和的平方展开后会出现两个正弦乘积项,按积化和差展开后在公共周期内积分为零.