分析:

将八面体置于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;
  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-7 下午5:10:05
  13. *
  14. */
  15. [SWF(width="800",height="600")]
  16. public class LineOctahedron extends Sprite
  17. {
  18. private var _faceArr:Array = [];
  19. private var _r:Number = 100;//中心到顶点的距离
  20. private var _focus:Number = 200;//焦距
  21. private var _lineContainer:Sprite;
  22. private var _container:Sprite;
  23. private var _vertexArr:Array = [{x:0,y:_r,z:0},{x:-_r,y:0,z:0},{x:0,y:0,z:_r},{x:_r,y:0,z:0},{x:0,y:0,z:-_r},{x:0,y:-_r,z:0}];
  24. public function LineOctahedron()
  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. for(i = 1;i<=4;i++){
  58. //从上面连到四周;
  59. _lineContainer.graphics.moveTo(_faceArr[0].X,_faceArr[0].Y);
  60. _lineContainer.graphics.lineTo(_faceArr[i].X,_faceArr[i].Y);
  61. //从下面连到四周;
  62. _lineContainer.graphics.moveTo(_faceArr[5].X,_faceArr[5].Y);
  63. _lineContainer.graphics.lineTo(_faceArr[i].X,_faceArr[i].Y);
  64. //四周顶点互连;
  65. _lineContainer.graphics.moveTo(_faceArr[i].X,_faceArr[i].Y);
  66. _lineContainer.graphics.lineTo(_faceArr[i!=4?i+1:1].X,_faceArr[i!=4?i+1:1].Y);
  67. }
  68. }
  69. private function createFace():void
  70. {
  71. for(var i:int = 0;i<6;i++){
  72. var mc:MovieClip = new MovieClip();
  73. _container.addChild(mc);
  74. _faceArr.push(mc);
  75. mc.x = _vertexArr[i].x;
  76. mc.y = _vertexArr[i].y;
  77. mc.z = _vertexArr[i].z;
  78. }
  79. }
  80. }
  81. }

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

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

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

  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. Linux -RAID

    转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/25/3099464.html 硬盘类型 速度 SATA <150M/s S ...

  2. Mysql函数FIND_IN_SET()的使用方法

    有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1.智能机,2.Andri ...

  3. Linux 下 apache 日志分析与状态查看[转]

    假设apache日志格式为: 118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] “GET /Public/Css/index.css HTTP/1.1″ 3 ...

  4. Oracle 11g 数据库自动备份执行脚本

    @echo offsetlocal enabledelayedexpansiontitle %date% %time:~,8% by LiaoNing Sunray Software Technolo ...

  5. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句.txt

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...

  6. Tortoisesvn单个文件夹checkout

  7. DBA常用SQL之会话与等待事件

    SELECT * FROM V$SESSION WHERE USERNAME IS NOT NULL AND STATUS = 'ACTIVE' ORDER BY LOGON_TIME, SID; 1 ...

  8. Call to undefined function bcscale()

    参考官方文档发现zabbix需要bcmath函数库的支持,其中bcscale()就是该函数库中的函数之一. 因此,现在只需要让php支持bcmath即可. yum -y install php-bcm ...

  9. 怎么优化JAVA程序的执行效率和性能?

    现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...

  10. 08socket编程

    有个SO_REUSEADDR值得注意一下: 服务器端尽可能使用SO_REUSEADDR 在绑定之前尽可能调用setsockopt来设置SO_REUSEADDR套接字选项. 使用SO_REUSEADDR ...