Flash与数学:球体曲面 (2)
参考了一个源码,大概了解3d球体的做法,借用了球体曲面的参数方程式,我们可以做出这种球面的图片分布效果出来。了解这种球面分布了解到每一张图片倾斜的角度是多少。当初看到这个源码,也让人觉得兴奋,因为他的原理其实不难。了解了数学模型背后的意义时候,大概会明白到这种图片效果是如何制作。主要涉及到角度的分布,和图片数量的分布。当中一些窍门之处都在处理图片角度倾斜,只要知道怎样倾斜。大概就会明白。
下面是一些简化版的清单,初步能够模拟不错的3D球效果。至于这个球体应用一些问题,会继续跟踪下去。
其中photo 是库链接出来的元件。只是一个图片。
package { import flash.display.Sprite; import flash.events.*; import flash.geom.*; import flash.display.DisplayObject; public class Main extends Sprite { private var R:int=240;//球体半径 private var centerX:Number=stage.stageWidth/2; private var centerY:Number=stage.stageHeight/2; private var contain:Sprite=new Sprite();//创建容器 private var angle:Number=30*Math.PI/180; private var list:Array=new Array(); private var photoCount:Array=[1,6,10,12,10,6,1];//图片数目 private var angleX:Array=[90,60,30,0,-30,-60,-90];//倾斜的x值 private var angleY:Array=[0,60,36,30,36,60,0];//倾斜的y值 private var speedx:Number=0; private var speedy:Number=0; public function Main() { addChild(contain); contain.x=centerX; contain.y=centerY; contain.z=300; createSphere();//创建球体分布 addEventListener(Event.ENTER_FRAME,Run); stage.addEventListener(MouseEvent.MOUSE_MOVE,onMove); } private function createSphere():void { for (var i:int=0; i<7; i++) { for (var j:int=0; j<photoCount[i]; j++) { var ball:Photo=new Photo(); contain.addChild(ball); list.push(ball); ball.x=R*Math.sin(i*angle)*Math.cos(j*angleY[i]*Math.PI/180);//球体公式表现 ball.z=R*Math.sin(i*angle)*Math.sin(j*angleY[i]*Math.PI/180); ball.y=R*Math.cos(i*angle); ball.rotationX= angleX[i];//偏移角度计算 ball.rotationY=-j*angleY[i]+270;// } } } //鼠标交互 private function onMove(event:MouseEvent):void { speedx=(mouseX-contain.x)*0.01; speedy=(mouseY-contain.y)*0.01; } private function Run(event:Event):void { contain.rotationY+=speedx; contain.rotationX+=speedy; sortZ(); } //深度排序管理 private function sortZ():void { list.sort(depthSort); for (var i:int=0; i<list.length; i++) { var myimage:Photo=list[i]; contain.setChildIndex(myimage,i); } } private function depthSort(objA:DisplayObject,objB:DisplayObject):int { var posA:Vector3D=objA.transform.matrix3D.position; posA=contain.transform.matrix3D.deltaTransformVector(posA); var posB:Vector3D=objB.transform.matrix3D.position; posB=contain.transform.matrix3D.deltaTransformVector(posB); return posB.z-posA.z; } } }
转载于:https://www.cnblogs.com/guoyiqi/archive/2010/02/05/2069222.html
Flash与数学:球体曲面 (2)相关推荐
- 用计算机制作数学PPT课件,使用flash制作数学课件经典案例.ppt
使用flash制作数学课件经典案例.ppt 当使用钢笔工具绘画时,可以创建直线段或是曲线段,也可以先画出直线段再调整线条上的点直到曲线段的造型符合用户的要求,这说明直线可以转换为曲线,实际上曲线也可转 ...
- Flash与数学: 旋轮线(2)
旋轮线又称为摆线,它所滚动的轨迹可能是一直线或者圆,不同的情况下产生的轨迹曲线会有所不同.其中一种是内摆线,一种是外摆线.这种线的描述可以在高等数学几何里面找到,或者百度搜索当中可以搜索到相关的资料. ...
- Flash 与数学:星形线
今晚我们来玩玩这种线绘制,星形线. 在大学的里面解析几何当中,把这种曲线叫做四尖点星形线.由于它的形状如星星 称上这个名称也不无道理,看到这种线的时候,你是否会许个愿望呢?一起来吧 星形线公式: x= ...
- Flash:动画实例--球体旋转
本文介绍球体旋转动画,效果如下: 操作具体步骤如下: 1. 打开 Flash,在第 1 帧的画布上,配置好所要绘制球体的填充色和边框色,然后选择椭圆工具,按住 Shift 键,绘制一个圆.为了使得圆看 ...
- Flash 与数学 星形线
今晚我们来玩玩这种线绘制,星形线. 在大学的里面解析几何当中,把这种曲线叫做四尖点星形线.由于它的形状如星星 称上这个名称也不无道理,看到这种线的时候,你是否会许个愿望呢?一起来吧 星形线公式: x= ...
- 椭圆锥面Matlab,有趣的数学3D曲面
数学是个很好玩的东西.高等数学中,我们学过很多二次曲面,它们都有很漂亮的3D效果,如下图: 1.椭圆锥面 (公式:z^2=(x^2)/(a^2)+(y^2)/(b^2)) Elliptic Cone ...
- Flash:动画实例--球体渐隐渐显
1. 打开 Flash,按 Ctrl + 2 将画布全部居中显示.用椭圆工具,按住 Shift键 在舞台左侧画一个圆,并利用颜料桶工具调整一下圆的填充色,使得圆画的更加立体抽象. 2. 将画的圆形转换 ...
- Flash 与数学:圆的切线(3)
在上面几节当中,已经了解过计算圆上任意一点的切线的方法,我们首先知道使用导数几何意义在哪里?在我们高中数学和大学的数学当中,说明了.导数的几何意义函数y=f(x)在点x0处导数为f'(x0)在几何上表 ...
- Flash与数学:圆(2)
在之前我们已经完成一个按圆的分布的效果,现在开始,我们对其进行一些扩展,结合到xml 和外部加载图片来测试这些交互小应用. 我们首先准备一些大小系列相同的图片.按一系列的顺序进行编写.编号为1.jpg ...
最新文章
- Mysql 源码安装
- 算法时间复杂度lg是多少_时间复杂度入门理解
- Codeforces Round #256 (Div. 2) D Multiplication Table
- 计算机系统基础:校验码知识笔记
- Golang时间格式化
- 解决“/dev/mapper/centos-root 100%”满了
- Java报错 -- The public type c must be defined in its own file
- Web SQL本地数据库(SQLLite)
- vivo的Android升级包,【原厂固件】vivo y66ia系统升级rom刷机包_卡刷包_PD1621B_A_1.9.6...
- 产品经理学习——卡诺模型
- stm32c8t6+bq76940 930 资料stm32c8t6+bq76940 锂电池管理系统(BMS)
- html网页如何在手机上实现,html和css结合实现手机端网页自适应的代码
- Iperf测试WIFI
- HashMap的四种同步方式
- 哪款蓝牙耳机跑步好用?跑步好用的耳机推荐
- 第四节课 hadoop总结
- STM32开发板搭建开发环境之安装篇
- 背景随意更换,同时改变多个竖屏短视频背景图片的两种方法
- 如何理解柯里化|函数式编程
- 家庭网络文件共享的几种方式