[ActionScript 3.0] AS3 绘制12面体
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Vector3D; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-9-1 下午2:32:43
*
*/
[SWF(width="800",height="600")]
public class Dodecahedron extends Sprite
{
private var _faceArr:Array = [];//存放每个面的数组
private var _radius:Number = 60;//五边形半径
private var _dis:Number;//中心点到五边形顶点的距离,可根据五边形半径计算
private var _angle:Number=Math.acos(-1/Math.sqrt(5))*180/Math.PI;//12面体相邻面之间的夹角
private var _container:Sprite;
public function Dodecahedron()
{
initViews();
initEventListeners();
}
private function initViews():void
{
_container = new Sprite();
_container.x = stage.stageWidth*0.5;
_container.y = stage.stageHeight*0.5; this.addChild(_container);
creatDodecahedron();
}
private function initEventListeners():void
{
this.addEventListener(Event.ENTER_FRAME,onMove);
}
private function onMove(e:Event):void
{
for(var i:int = 0;i<_faceArr.length;i++){
_faceArr[i].transform.matrix3D.appendRotation(-(mouseX-stage.stageWidth*0.5)/10,Vector3D.Y_AXIS);
_faceArr[i].transform.matrix3D.appendRotation((mouseY-stage.stageHeight*0.5)/10,Vector3D.X_AXIS);
}
_faceArr.sortOn("z",18);//如果为 options 参数指定值 8 或 Array.RETURNINDEXEDARRAY,则返回反映排序结果的数组并且不修改数组。
for(i=0;i<_faceArr.length;i++){
_container.setChildIndex(_faceArr[i],i);
} }
private function creatDodecahedron():void
{
var b:Number = Math.sqrt(_radius*_radius*2-2*_radius*_radius*Math.cos(360/6 * Math.PI/180));//五边形的边长
var h1:Number = Math.sqrt(_radius*_radius-b*b/4);//五边形中心点到任意边的高
//var h:Number = h1 * Math.tan((180-116.56505)*0.5*Math.PI / 180);//12面体中心点到五边形中心点的距离
_dis = h1 / Math.sin((180-116.56505)*0.5*Math.PI / 180);//12面体中心点到五边形顶点的距离 for(var i:int = 0;i<12;i++){
var pentagon:Sprite = drawPentagon(_radius,Math.random()*0xFFFFFF);
pentagon.z = -Math.sqrt(_dis*_dis-_radius*_radius);
_container.addChild(pentagon);
_faceArr.push(pentagon);
}
_faceArr[6].transform.matrix3D.appendRotation(180,Vector3D.Y_AXIS);
for(i=1;i<=5;i++){
//12面体相邻面的夹角arccos(-1/√5)*180/π=116.56505
//trace(Math.acos(-1/Math.sqrt(5))*180/Math.PI);
_faceArr[i].transform.matrix3D.appendRotation(_angle,Vector3D.Y_AXIS);
//绕z轴分布;
_faceArr[i].transform.matrix3D.appendRotation(36-(i-1)*72,Vector3D.Z_AXIS);
_faceArr[i + 6].transform.matrix3D.appendRotation(180+_angle,Vector3D.Y_AXIS);
_faceArr[i + 6].transform.matrix3D.appendRotation(36-(i-1)*72,Vector3D.Z_AXIS);
}
}
/**
* 绘制五边形
* @param r
* @param color
* @return
*/
private function drawPentagon(r:Number = 60,color:uint = 0xff00ff):Sprite
{
var pointArr:Array = [];
for(var i:int = 0;i<5;i++){
pointArr.push(new Point(r*Math.cos(i*Math.PI*2/5),r*Math.sin(i*Math.PI*2/5)));
}
var pentagon:Sprite = new Sprite();
pentagon.graphics.lineStyle(0,0);
pentagon.graphics.beginFill(color,0.9);
pentagon.graphics.moveTo(pointArr[0].x,pointArr[0].y);
for(i = 1;i<=5;i++){
pentagon.graphics.lineTo(pointArr[i%5].x,pointArr[i%5].y);
}
pentagon.graphics.endFill();
return pentagon;
}
}
}
[ActionScript 3.0] AS3 绘制12面体的更多相关文章
- [ActionScript 3.0] AS3 绘制正二十面体(线条)
分析: 正二十面体共有12个顶点.30条棱,其20个面都是正三角形.每条棱所对应的弧度值为1.1071487177940904弧度,这个弧度值可通过求Math.sqrt(5)/5的反余弦值求得.正二十 ...
- [ActionScript 3.0] AS3 绘制星形
package { import flash.display.Sprite; import flash.events.Event; /** * @author Frost.Yen * @E-mail ...
- [ActionScript 3.0] AS3 绘制正四面体(线条)
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; im ...
- [ActionScript 3.0] AS3 绘制正八面体(线条)
分析: 将八面体置于3D坐标系中,其中心的坐标位于原点(0,0,0),让八面体的六个顶点恰好位于3D坐标系的x轴.y轴和z轴上,则从八面体的中心到这六个顶点的距离是相等的.我们可以假设这个距离为r,则 ...
- [ActionScript 3.0] AS3 绘制立方体
package { import flash.display.Sprite; import flash.events.Event; import flash.geom.Vector3D; import ...
- [ActionScript 3.0] AS3 绘制任意三角形任意顶点到对边的高
注:顶点坐标可以点击 package { import flash.display.Shape; import flash.display.Sprite; import flash.events.Mo ...
- [ActionScript 3.0] as3处理xml的功能和遍历节点
as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...
- [ActionScript 3.0] AS3.0 动态加载显示内容
可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...
- [ActionScript 3.0] AS3虚线绘制方法
import flash.geom.Point; import flash.display.MovieClip; import flash.display.Graphics; var mc:Movie ...
随机推荐
- Oracle数据库—— 存储过程与函数的创建
一.涉及内容 1.掌握存储过程与函数的概念. 2.能够熟练创建和调用存储过程与函数. 二.具体操作 1.创建存储过程,根据职工编号删除scott.emp表中的相关记录. (1)以scott 用户连接数 ...
- for 与 foreach 性能
For 与Foreach 性能 差别在不同的场景下会有不同的差异. 对于不同的目标 , 如 T[] 与 IEnumerable<T> 两个的性能就感觉出来了,对于T[] 都快. ...
- 云主机-vps购买
Linode VPS主机 http://jingyan.baidu.com/article/676629972be5e054d41b846c.html Linode VPS可以说是世界上最好的VPS, ...
- 原生js的String类扩展
文章转自:http://www.cnblogs.com/zfc2201/archive/2012/12/16/2820335.html JS String类拓展方法: //获取字符数组 String. ...
- python escape sequences
转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \ ...
- asp.net中virtual和abstract的区别
这篇文章主要介绍了asp.net中virtual和abstract的区别,较为详细的分析了virtual与abstract的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...
- MySQL explain key_len 大小的计算
总结: 变长字段需要额外的2个字节,固定长度字段不需要额外的字节.而null都需要1个字节的额外空间,所以以前有个说法:索引字段最好不要为NULL,因为NULL让统计更加复杂,并且需要额外一个字节的存 ...
- [mysql] ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.
今天安装mysql遇到这样一个问题: ERROR 1862 (HY000): Your password has expired. To log in you must change it using ...
- Angular学习(1)
天天都是hello world,老子玩1+1. 最简单的例子,见证无聊的时刻: <!DOCTYPE html> <html> <head> <title> ...
- Phonegap在ios7上系统状态栏的问题解决
用Phonegap+jqm开发的应用,在ios6下没问题,但是在ios7下会出现如下系统状态栏和header重合的问题,搜索了一下,发现这其实是 phonegap当前版本的一个已知问题,通过修改./p ...