射线追踪算法

一:有人研究SBR(弹跳射线或射线跟踪)方法计算腔体RCS的么?

这是一个计算电磁学的高频算法,但是并不是一个单一的算法,因为里面的过程比较复杂,涉及到的几个过程分别都用不同的方法,原来是应用在军事领域,用来计算飞机的导弹孔或是进气道的RCS,进而可以用来如何让飞机实现隐形,我只是看过一些IEEE上面的论文,但是想要把算法和程序做畅来很有难度。在这方面还是新手,所以希望有人能指点一下,我觉得将数值计算的某些方法用程序实现出来的思路应该都是差不多的, cem-uestc能帮忙指点一下么,在另外一个论坛也看到你的身影,看过你的很多帖子,牛人啊!主要是想知道这方面的工作应该按照怎样的顺序展开?做哪些方面的准备工作?以及应该具备哪些方面的基础?谢谢!

二:下段代码会被频繁调用 怎么优化使其更适合运行

1. 记住阿姆达尔定律:

funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。

所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。

这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。

这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。

2. 代码先保证正确,然后再考虑优化

这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。

分多步来做性能优化。

先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。

然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。所有频繁调用的函数,都需要优化。

3. 我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。

4.跳转和分支执行代价高,如果可能,尽量少用。

函数调用需要两次跳转,外加栈内存操作。

优先使用迭代而不是递归。

使用内联函数处理短小的函数来消除函数调用开销。

将循环内的函数调用移动到循环外(例如,将for(i=0;i<100;i++) DoSomething();改为DoSomething() { for(i=0;i<100;i++) { … }})。

if…else if…else if…else if…很长的分支链执行到最后的分支需要很多的跳转。如果可能,将其转换为一个switch声明语句,编译器有时候会将其转换为一个表查询单次跳转。如果switch声明不可行,将最常见的场景放在if分支链的最前面。

5. 仔细思考函数下标的顺序。

两阶或更高阶的数组在内存中还是以一维的方式在存储在内存中,这意味着(对于C/C++数组)array[i][j] 和 array[i][j+1]是相邻的,但是array[i][j] 和array[i+1][j]可能相距很远。

以适当的方式访问存储实际内存中的数据,可以显著地提升你代码的执行效率(有时候可以提升一个数量级甚至更多)。

现代处理器从主内存中加载数据到处理器cache,会加载比单个值更多的数据。该操作会获取请求数据和相邻数据(一个cache行大小)的整块数据。这意味着,一旦array[i][j]已经在处理器cache中,array[i][j+1]很大可能也已经在cache中了,而array[i+1][j]可能还在内存中。

三:什么是矩量法

摘 要:介绍了电磁学计算方法的研究进展和状态,对几种富有代表性的算法做了介绍,并比较了各自的优势和不足,包括矩量法、有限元法、时域有限差分方法以及复射线方法等。

关键词:矩量法;有限元法;时域有限差分方法;复射线方法

1 引 言

1864年Maxwell在前人的理论(高斯定律、安培定律、法拉第定律和自由磁极不存在)和实验的基础上建立了统一的电磁场理论,并用数学模型揭示了自然界一切宏观电磁现象所遵循的普遍规律,这就是著名的Maxwell方程。在11种可分离变量坐标系求解Maxwell方程组或者其退化形式,最后得到解析解。这种方法可以得到问题的准确解,而且效率也比较高,但是适用范围太窄,只能求解具有规则边界的简单问题。对于不规则形状或者任意形状边界则需要比较高的数学技巧,甚至无法求得解析解。20世纪60年代以来,随着电子计算机技术的发展,一些电磁场的数值计算方法发展起来,并得到广泛地应用,相对于经典电磁理论而言,数值方法受边界形状的约束大为减少,可以解决各种类型的复杂问题。但各种数值计算方法都有优缺点,一个复杂的问题往往难以依靠一种单一方法解决,常需要将多种方法结合起来,互相取长补短,因此混和方法日益受到人们的重视。

本文综述了国内外计算电磁学的发展状况,对常用的电磁计算方法做了分类。

2 电磁场数值方法的分类

电磁学问题的数值求解方法可分为时域和频域2大类。频域技术主要有矩量法、有限差分方法等,频域技术发展得比较早,也比较成熟。时域法主要有时域差分技术。时域法的引入是基于计算效率的考虑,某些问题在时域中讨论起来计算量要小。例如求解目标对冲激脉冲的早期响应时,频域法必须在很大的带宽内进行多次采样计算,然后做傅里叶反变换才能求得解答,计算精度受到采样点的影响。若有非线性部分随时间变化,采用时域法更加直接。另外还有一些高频方法,如GTD,UTD和射线理论。

从求解方程的形式看,可以分为积分方程法(IE)和微分方程法(DE)。IE和DE相比,有如下特点:IE法的求解区域维数比DE法少一维,误差限于求解区域的边界,故精度高;IE法适合求无限域问题,DE法此时会遇到网格截断问题;IE法产生的矩阵是满的,阶数小,DE法所产生的是稀疏矩阵,但阶数大;IE法难以处理非均匀、非线性和时变媒质问题,DE法可直接用于这类问题〔1〕。

3 几种典型方法的介绍

有限元方法是在20世纪40年代被提出,在50年代用于飞机设计。后来这种方法得到发展并被非常广泛地应用于结构分析问题中。目前,作为广泛应用于工程和数学问题的一种通用方法,有限元法已非常著名。

有限元法是以变分原理为基础的一种数值计算方法。其定解问题为:

应用变分原理,把所要求解的边值问题转化为相应的变分问题,利用对区域D的剖分、插值,离散化变分问题为普通多元函数的极值问题,进而得到一组多元的代数方程组,求解代数方程组就可以得到所求边值问题的数值解。一般要经过如下步骤:

①给出与待求边值问题相应的泛函及其变分问题。

②剖分场域D,并选出相应的插值函数。

③将变分问题离散化为一种多元函数的极值问题,得到如下一组代数方程组:

其中:Kij为系数(刚度)矩阵;Xi为离散点的插值。

④选择合适的代数解法解式(2),即可得到待求边值问题的数值解Xi(i=1,2,…,N)

(2)矩量法

很多电磁场问题的分析都归结为这样一个算子方程〔2〕:

L(f)=g(3)其中:L是线性算子,f是未知的场或其他响应,g是已知的源或激励。

在通常的情况下,这个方程是矢量方程(二维或三维的)。如果f能有方程解出......余下全文>>

四:第一款射击游戏到现在有多少部

世界上第一款第一人称射击类游戏叫做《德军总部3D》,GBA和手机上有重制版。 1993年,一款名不见经传的游戏风靡了世界各地的386电脑,这就是FPS游戏的开山鼻祖--德军总部3D。这款游戏开创了一种新的游戏方式,以自己的视角探索地图并击杀敌人,这种方式后来被称作FPS(第一人称射击游戏),当然这款游戏虽然标榜是3D游戏,其实只是以射线追踪算法锁做出来的伪三维效果。在这种算法下诞生的DOOM,雷神之锤等众多经典的游戏,而FPS游戏则以此款游戏作为原点。

五:第一款FPS(第一人称射击)游戏是?

世界上第一款第一人称射击类游戏叫做《德军总部3D》,GBA和手机上有重制版。

1993年,一款名不见经传的游戏风靡了世界各地的386电脑,这就是FPS游戏的开山鼻祖--德军总部3D。这款游戏开创了一种新常游戏方式,以自己的视角探索地图并击杀敌人,这种方式后来被称作FPS(第一人称射击游戏),当然这款游戏虽然标榜是3D游戏,其实只是以射线追踪算法锁做出来的伪三维效果。在这种算法下诞生的DOOM,雷神之锤等众多经典的游戏,而FPS游戏则以此款游戏作为原点。

六:回调函数运行时间太长影响了程序性能,怎么办

1.记住阿姆达尔定律:funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。2.代码先保证正确,然后再考虑优化这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。分多步来做性能优化。先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。所有频繁调用的函数,都需要优化。3.我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。4.跳转和分支执行代价高,如果可能,尽量少用。函数调用需要两次跳转,外加栈内存操作。优先使用迭代而不是递归。使用内联函数处理短小的函数来消除函数调用开销。将循环内的函数调用移动到循环外(例如,将for(i=0;i<100;i++)DoSomething();改为DoSomething(){for(i=0;i<100;i++){…}})。if…elseif…elseif…elseif…很长的分支链执行到最后的分支需要很多的跳转。如果可能,将其转换为一个switch声明语句,编译器有时候会将其转换为一个表查询单次跳转。如果switch声明不可行,将最常见的场景放在if分支链的最前面。5.仔细思考函数下标的顺序。两阶或更高阶的数组在内存中还是以一维的方式在存储在内存中,这意味着(对于C/C++数组)array[i][j]和array[i][j+1]是相邻的,但是array[i][j]和array[i+1][j]可能相距很远。以适当的方式访问存储实际内存中的数据,可以显著地提升你代码的执行效率(有时候可以提升一个数量级甚至)。现代处理器从主内存中加载数据到处理器cache,会加载比单个值的数据。该操作会获取请求数据和相邻数据(一个cache行大小)的整块数据。这意味着,一旦array[i][j]已经在处理器cache中,array[i][j+1]很大可能也已经在cache中了,而array[i+1][j]可能还在内存中。

七:德军总部的系列简介

著名的动作游戏系列。共包括以下作品: 德军总部系列   第一代 Castle Wolfenstein · Beyond Castle Wolfenstein 第二代 Wolfenstein 3D · Spear of Destiny & The Lost Episodes 第三代 Return to Castle Wolfenstein · Wolfenstein: Enemy Territory 第四代 Wolfenstein 第五代 Wolfenstein:The New Order 移动平台  WolfensteinPRG 德军总部1基本信息英文名:Castle Wolfenstein中文名:德军总部 类型:动作游戏研发:Muse Software发行年:1981平台:Apple II简介经典游戏之一, 当初不知道风靡了世界上多少玩家. 游戏的目的是逃离德军城堡, 途中可是有警卫的, 不过可以穿上德军制服假扮, 掩人耳目, 非常过瘾. 要成功的脱出非常困难,开锁也是一件很痛苦的事, 好一点的开30秒, 比较久可能要枯等一分多钟. 德军总部2:秘密警察基本信息英文名:Beyond Castle Wolfenstein中文名:德军总部2:秘密警察类型:动作游戏研发:Muse software发行年:1984操作系统:Apple II&Atari 8-bit&Commodore 64&DOS简介跟一代不同的是, 这代的目的是要找到希特勒的办公室然后安装炸弹. 图形更加精美, 且敌人更加狡狯, 还会按警铃. 不过这一代可以用钱买通警卫, 是一个很有趣的设计. 一开始旁边会有数字, 代表你所拿到的通行证, 如果太少的话建议重新开始游戏, 不然游戏会进行的很辛苦. 德军总部3d基本信息英文名称:Wolfenstein 3D其他译名:狼堡3D /暗杀希特勒研发:idsoftware代理:Apogee Software (DOS) &Interplay Entertainment (3DO)&BAM! Entertainment (GBA)&Atari Corporation (Jaguar)&MacPlay (Macintosh)&Imagineer (SNES)&Zodttd (iPhone OS)游戏类型:FPS平台:DOS&3DO&GBA&jaguar&Macintosh&SNES&iPhone OS发行日期:1992年简介1992年,一款名不见经传的游戏风靡了世界各地的386电脑,这就是FPS游戏的开山鼻祖——《德军总部3D》。这款游戏开创了一种新的游戏方式,以自己的视角探索地图并击杀敌人,这种方式后来被称作FPS(第一人称射击游戏),当然这款游戏虽然标榜是3D游戏,其实只是以射线追踪算法锁做出来的伪三维真贴图的效果。在这种算法下诞生的DOOM,毁灭公爵等众多经典的游戏,而FPS游戏则以此款游戏作为原点。 德军总部4游戏名称:Wolfenstein中文名称:德军总部游戏类型:第一人称射击(FPS)制作公司:ID Software / Raven Software发行厂商:Activision(动视)上市时间:2009年8月18日简介第一人称射击游戏的始祖《德军总部》(Wolfenstein)就要回来了。距离上一款作品《重返德军总部》已有8年之久。故事背景接续在《重返德军总部》之后,玩家将扮演盟军的超级士兵,他曾在二次世界大战期间击败了纳粹和恶魔,现在他又即将在本作中继续阻止纳粹的阴谋。《德军总部》采用全新3......余下全文>>

扫一扫手机访问

发表评论