Tag: 物理

使用GPU加速BigInteger计算

我几乎完成了一个处理一些非常大的整数的算法(大约2的数量增加到100,000,000的幂)。 这需要在16核服务器上使用几个小时的高度并行代码,并且内存足够,因为算法不是内存密集型的。 我使用.NET 4中的BigInteger类。 算法的细节并不重要,但对于上下文,以下是对这些整数执行的操作的非常详尽的列表以及算法的一些显着特征: 加法/减法。 大数乘以小数。 通过非常小的数字划分大数(例如2)。 基地2日志。 基地2力量。 两个或多个大数字的比较(最小/最大)。 没有任何关于素数的介入。 该算法专门设计为不占用大量内存,因为内存访问的性能损失超过了一些智能的即时计算。 然而,如果要改进内存访问,算法可以合理地受益。 我已经尽可能地优化了代码,现在分析只显示了两个瓶颈: 计算基数2记录如此大的数字。 检查这些数字中预定义的二进制数字模式。 这是因为访问BigInteger底层数据的唯一方法是首先使用ToByteArray而不是就地操作。 此外,在字节大小的块上操作也无助于提高性能。 考虑到内存访问和日志操作,我开始考虑GPU以及是否可以有效地卸载一些工作。 我对GPU知之甚少,只是它们针对浮点运算进行了优化。 我的问题是,使用像GPU .NET这样的库,如何在GPU上处理如此大的数字? 我可以以某种方式利用浮点优化来计算这么大的数字的Log吗? 寻找形成战略的起点。

三角形 – 三角交点测试

我想知道是否有一些教程或指南来理解和实现3D环境中的三角形 – 三角形交叉测试。 (我不需要知道交叉点发生的确切位置,但只知道交叉点已经发生) 我打算按照理论的pdf来实现它,但我很沮丧 三角形的计算平面方程2。 如果三角形1的所有点都在同一侧,则拒绝为微不足道。 三角形的计算平面方程1。 如果三角形2的所有点都在同一侧,则拒绝为微不足道。 计算交叉线和项目到最大轴。 计算每个三角形的间隔。 相交间隔。 本指南的第5点。 我真的不知道在问什么(所有5,6和7)。 XD 因为我没有很高的数学知识(好吧,我知道大学的几门考试给了我(我是一名原始程序员XD)),请尽量让我尽可能简单。 :D(我试图在谷歌搜索,但大多数链接指向大约4-5页的公式,我真的不知道,我不明白。) 谢谢您的帮助

阻止碰撞运动

我正在XNA开发一款2D游戏,而且我正在研究我的物理课。 我当前的任务是在物体与另一物体相撞时停止物体。 当两个物体发生碰撞时,我让我的游戏调用此function: public void BlockMovement(gameObject target) { //you can call width by just typing width. same for height owner.position.X += (owner.position.X – target.position.X); owner.position.Y += (owner.position.Y – target.position.Y); } 问题是,而不是停止。 正在移动的物体被它的宽度推回。 谁能请出示/告诉我如何做到这一点我在很多项目中一直坚持这一点。 谢谢

基于鼠标瞄准Unity3d

我正在制作炮弹射击游戏。 这是一个简短的代码,我在计算瞄准方向。 Vector3 mousePos = Input.mousePosition; mousePos.z = thisTransform.position.z – camTransform.position.z; mousePos = mainCamera.ScreenToWorldPoint (mousePos); Vector3 force = mousePos – thisTransform.position; force.z = force.magnitude; 这适用于球和角度(0,0,0)。 但是当角度改变时,我无法向正确的方向射击。 假设球和相机在右侧看45度,相同的代码不起作用。 当前代码假定两者都是角度(0,0,0)。 所以在上面提到的情况下,投掷方向总是错误的。 我想把球扔向任何方向。 但假设它为0角并相应地投掷。

三维空间中的曲线拟合点

试图找到有助于我们通过一系列点绘制3D线的函数。 对于我们知道的每个点:日期和时间,纬度,经度,海拔高度,速度和航向。 数据可能每10秒记录一次,我们希望能够猜测两者之间的点数,并将粒度增加到1秒。 从而在3D空间中创建虚拟飞行路径。 我发现了许多曲线拟合算法,这些算法将通过一系列点近似于一条直线,但它们不能保证这些点相交。 他们也没有考虑速度和航向来确定物体到达下一个点所采取的最可能路径。