Flash与数学:球体曲面

2024-03-30 21:32
文章标签 数学 flash 球体 曲面

本文主要是介绍Flash与数学:球体曲面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

参考了一个源码,大概了解3d球体的做法,借用了球体曲面的参数方程式,我们可以做出这种球面的图片分布效果出来。了解这种球面分布了解到每一张图片倾斜的角度是多少。当初看到这个源码,也让人觉得兴奋,因为他的原理其实不难。了解了数学模型背后的意义时候,大概会明白到这种图片效果是如何制作。主要涉及到角度的分布,和图片数量的分布。当中一些窍门之处都在处理图片角度倾斜,只要知道怎样倾斜。大概就会明白。

下面是一些简化版的清单,初步能够模拟不错的3D球效果。至于这个球体应用一些问题,会继续跟踪下去。

其中photo 是库链接出来的元件。只是一个图片。

  view plaincopy to clipboardprint?
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;  
        }  
 
    }  

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hero82748274/archive/2010/02/05/5290739.aspx

这篇关于Flash与数学:球体曲面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/862626

相关文章

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的, 论文可以从 https://arxiv.org/abs/2205.14135 页面下载,点击 View PDF 就可以下载。 下面我

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。