【问题标题】:Points resulting from the intersection between three spheres using GPU hardware使用 GPU 硬件从三个球体之间的交点产生的点
【发布时间】:2011-09-15 00:27:40
【问题描述】:

有一些解析表达式可以计算三个穿透球体重叠所产生的曲线。还有一些近似方法使用网格或其他方法,以或多或少的精度计算属于此交点的点。我想知道对于后者,是否可以使用来自 GPU 的特殊硬件功能,使用 CUDA 或 OpenGL 以某种方式完成计算。我需要它用于计算密集型数字运算程序,因此琐碎的实现无效,因为它们非常慢,这就是我考虑 GPU 选项的原因

【问题讨论】:

  • 如果你只是与球体相交,那么计算和结果就很简单:两个球体的交点总是一个圆或一个点,或者根本没有。 --- 真正困难的是参数补丁表面的交叉点,因为这意味着找到高阶多项式的零交叉点。
  • 我的意思是三个球体;参数化面片,准确的
  • 你可以混合任意数量的球体,它几乎总是微不足道的,而且很快就能解决。三个球体相交,最终有两个圆形边界?没问题:找到最近的点(可以再次进行分析),然后使用圆上的转角作为第一个参数,将那里的点之间的圆弧作为第二个参数。添加另一个球体,然后在这些弧之间进行插值。整个事情可以在递归程序中以封闭形式编写。读者练习:用所选的函数式语言实现它。

标签: opengl cuda geometry gpu hardware


【解决方案1】:

要测试一个点 (x, y, z) 是否在一个以 (a, b, c) 为中心,半径为 r 的球体中,测试是:

(x - a)^2 + (y - b)^2 + (z - c)^2 < r^2

测试该点是否在多个球体中只是类似表达式的and。这只需要减法、乘法和比较,不需要特殊的硬件功能。您可以编写一个 CUDA 内核来毫无问题地执行此操作。

可能适用的最接近的“专用硬件”是 CUDA 中的 rsqrtf() 函数,它使用单个硬件指令以单精度计算 1/sqrt(x) 以达到良好的精度。您可以使用它来帮助计算给定球体的 x 和 y 值的 z 值,这对于解决此问题的更复杂的点生成算法可能很有用。

【讨论】:

    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多