【问题标题】:Ray and 3D Face Intersection射线和 3D 面相交
【发布时间】:2011-05-25 18:39:45
【问题描述】:

我有一个由n 点(v1v2v3、...、vn)定义的 3D 面,在 3D 坐标中,我有一个等式的射线:

P=P0+t(P1-P0).

0<=t<=1.

现在,如何找到这条射线和人脸之间的交点(或缺点)?

另外,如果有一个现有的 C# 实现,那就太好了?

编辑:3D 面可以是凹的凸的。所有的点都是共面的。

【问题讨论】:

    标签: c# geometry


    【解决方案1】:

    我想你的 3D 多边形是平面的(否则它不是真正的多边形,也没有很好的定义)。因此,您可以找到该平面的二维正交基。这意味着您可以使用任何 2D 三角剖分算法(您可以在网上找到许多 c# 实现)并使用您的正交基准返回 3D。 通过这种方式,您将获得 3D 三角形,并且能够通过运行多个光线-三角形相交测试轻松地进行光线-多边形相交测试。

    另一种方法是执行射线平面相交计算。取交点 P,用上面正交基的 2D 坐标表示。此外,与前面的解决方案一样,使用相同的基础在 2D 中表示您的多边形。然后运行任何“多边形中的点”2D 算法,您将得到结果。

    更新:这是数学 您可以在平面 p1、p2 上取任意两个点(例如多边形的两个点)并取向量 u = p2 - p1。归一化它,它是第一个基向量。然后取平面的法线 N 并计算 v = cross_product(u , N) 并对 v 进行归一化。这是第二个基向量。请注意,两个向量都有单位长度,并且它们彼此正交。因此它们形成一个标准正交基。

    现在将 p1 定义为平面的原点。然后将多边形上任意点 q 平移到 2D(q 可以是多边形的顶点之一,也可以是多边形平面上的任何其他点):

    x = dot_product(q - p1, u)
    y = dot_product(q - p1, v)
    

    这里的 x,y 是点的 2D 坐标。

    因此,在将所有内容转换为 2D 并执行 2D 算法后,您可以将任何 2D 点 (x, y) 转换回 3D,如下所示:

    q = p1 + x * u + y * v
    

    这里 * 是标量向量积(x,y 是标量,u,v 是向量)。

    亚历克斯。

    【讨论】:

    • 是否可以在没有 3D-2D 正交变换的情况下做到这一点?有没有关于如何进行正交变换的参考?我很想阅读它们,谢谢!
    • 我会在消息中写下答案。评论的格式化能力很差:)
    【解决方案2】:

    如果您的点不是共面的(即不都位于一个平面上),那么您需要将曲面细分为一组平面,然后为每个平面进行线-多边形相交。更好的是,定义一个三角形列表,然后搜索线-三角形相交结果。

    但是,您不会说您的点是定义多面对象(即由三角形组成)还是定义曲面的一组控制点。前者由上述处理。如果是曲面,我认为这是一个不可计算的问题,即确定一条线与由一组点定义的曲面的交点的问题没有简单的解决方案。您可以做的最好的事情是使用查找交点的迭代过程,但即使这样也可能导致不稳定的搜索(即永远不会完成的搜索)。

    我认为转换为一组三角形是最好的答案。

    【讨论】:

    • 如果这些点是共面的,它将如何改变(或简化)Alex 的解决方案?
    • @Ngu:在这种情况下,首先进行线平面测试,如果失败,则说明它没有相交。如果通过,则使用交点确定结果。我认为转换为三角形是最简单的。您还可以投影到 2D 并计算左侧有多少线段(即相同的 Y)作为交点(奇数 = 内部,偶数 = 外部)
    【解决方案3】:

    您正在使用光线-多边形相交算法,这里有一个指向图形宝石条目的链接:http://www-graphics.stanford.edu/courses/cs348b-98/gg/intersect.html

    【讨论】:

    • 那是光线三角形,不是光线多边形。我意识到你可能会说我们可以分解一个多边形。但在我的情况下,三角测量可能并不容易,因为我正在做一个 3D 多边形。另外,我的多边形可能是凹的,所以链接中的解决方案可能不起作用。
    • @Ngu,是的,这不适用于凹多边形。使用 Alex 的解决方案。
    猜你喜欢
    • 2011-11-02
    • 2011-08-05
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多