在平面的时候,圆可以认为是椭圆一个特例,而球面也可以认为球椭球面一个特例,但是两者依旧会存在一些差别。这一些差别会产生不同的形状,查阅了一些关于椭球面的资料很皮毛了解一些。
椭球体的方程表示: x2 /a2+y2/b2+z2/c2=1;
参数方程:
(该图片来源于网络)
通常(a≥b≥c>0) (0≤θ≤2π,0≤φ≤π)
a b c 分别代表 长轴 中轴 短轴
下面收集一些知识点:截图
然后我们通过编程模拟出一个简单的效果:
其中var ball:Ball=new Ball(); 是通过库链接出来一个普通元件,可以进行添加 修改
package { import flash.display.Sprite; import flash.events.*; import flash.geom.PerspectiveProjection; public class Main extends Sprite { private var a:int=200;//用于椭圆的球体 private var b:int=80; private var c:int=60; private var centerX:Number=stage.stageWidth/2; private var centerY:Number=stage.stageHeight/2; private var contain:Sprite=new Sprite();//创建容器 public function Main() { addChild(contain); contain.x=centerX; contain.y=centerY; createEllipsoid(); root.transform.perspectiveProjection.fieldOfView=120;//初始化透视角度 addEventListener(Event.ENTER_FRAME,Run); } //创建椭球体 private function createEllipsoid ():void { for (var i:int=0; i<180; i+=20) { //纬度 for (var j:int=0; j<360; j+=20) { //经度 var ball:Ball=new Ball(); contain.addChild(ball); ball.x=a*Math.sin(i*Math.PI/180)*Math.cos(j*Math.PI/180); ball.z=b*Math.sin(i*Math.PI/180)*Math.sin(j*Math.PI/180); ball.y=c*Math.cos(i*Math.PI/180); } } } private function Run(event:Event):void { contain.rotationY+=0.3; } } }
生成一些效果:
小结:
更改abc 的值会产生不一样的变化,复制的数也改变一下 会产生令人意想不到的美感在这里。对这方面的知识来讲,仅仅冰山一角,因为涉及的高等数学还是很多需要去理解,而这一部分个人而言依旧是很空白,只能查询一些资料来看。但是个人会继续探讨完善这一部分知识。鉴于flash cs4的3d 效果并一定很出色,可以尝试通过一些flash 3D引擎进行模拟,说不定会有不错的效果。这一部分交给有心人。