【问题标题】:Generate random point on a 2D disk in 3D space given normal vector给定法线向量,在 3D 空间中的 2D 磁盘上生成随机点
【发布时间】:2013-10-12 17:47:49
【问题描述】:

有没有一种简单有效的方法可以在 3 维空间中“悬挂”的磁盘上生成随机(均匀分布)点?磁盘由其法线定义。

理想情况下,我想避免使用旋转矩阵,因为我不完全了解它们,而且我知道它们有问题。

到目前为止,我已经尝试生成一个 3D 单位向量并将其投影到磁盘的平面上,这确实确保了该点位于磁盘内,但不能确保它是均匀分布的。 我还尝试根据其长度的某些函数缩放生成的向量,但无论如何我都无法得到均匀分布。

我有一个想法,即创建两个相互垂直且垂直于法线的向量来定义局部坐标系。然后我可以像在 2D 中一样在单位磁盘上生成一个点,并将结果转换回全局坐标系。这似乎会非常有效,因为它涉及一些预计算(我完全可以接受)并且之后只进行简单的计算(这是针对光线追踪器的,所以它会发生很多)。问题是,我不知道如何可靠地计算局部坐标系的基向量,同时避免可能出现的共线性问题。

非常感谢任何帮助。

【问题讨论】:

    标签: math random 3d geometry linear-algebra


    【解决方案1】:

    计算法线 n = (a,b,c) 的平面的正交基向量 u, v 的简单方法是找到具有最小绝对值的分量,并使 u 与该分量正交;其余的几乎都紧随其后。例如,如果第一个分量是绝对值最小的分量,您可以选择这些基向量:

    u = (0, -c, b)                //  n·u = -bc+cb = 0
    
    v = (b²+c², -ab, -ac)         //  n·v = ab²+ac²-ab²-ac² = 0, u·v = abc-abc = 0
    

    【讨论】:

    • 谢谢,这正好解决了我的问题。澄清一下,我需要设置为0u 的组件是n 中最大的组件,对吗?是否因此,对于每个 3 向量,存在至少一个(两个?)对应的正交向量,该向量平行于由系统的轴定义的 3 个平面之一(因此其分量之一是 0)?
    • 是的:法向量定义了一个平面,任何两个平面要么平行,要么沿着一条线交叉。相交线上的任何向量都平行于两个平面。
    • 等一下...检查更新,例如,我写的内容会因 n = (1,0,0) 而中断,因为它会计算 u = v = (0,0, 0)。您应该选择 minimal 组件。
    • 好收获!这种方法是连续的吗,也就是说,当法线向量被旋转时,我可以依靠它不会突然“翻转”其中一个基向量吗?
    • 无论怎么调整都无法使函数连续这一事实一点也不明显,但这是"Hairy ball" theorem的推论。
    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多