【问题标题】:3D Line - Plane intersection?3D 线 - 平面相交?
【发布时间】:2010-12-07 23:04:13
【问题描述】:

我有两个向量 (X,Y,Z),一个高于 Y=0,一个低于 Y=0。 我想找到两个原始向量之间的线与Y=0 级别相交的向量 (X,Y,Z)。 我该怎么做?

示例A点:

X = -43.54235
Y = 95.2679138
Z = -98.2120361

示例点 B:

X = -43.54235
Y = 97.23531
Z = -96.24464

这些点从用户单击的两个 UnProjection 中读取,我正在尝试将 unprojection 定位到 Y=0

(我找到了3D line plane intersection, with simple plane,但不理解接受的答案,因为它是针对 2D 的)

【问题讨论】:

    标签: math geometry line plane


    【解决方案1】:

    我怀疑两个向量实际上是指两个点,并且希望将连接这两个点的线与Y=0 定义的平面相交。

    如果是这样,那么您可以使用两点之间的线的定义:

    <A + (D - A)*u, B + (E - B)*u, C + (F - C)*u>

    <A,B,C> 是您的一个点,<D,E,F> 是另一个点。 u 是一个未定义的标量,用于计算沿这条线的点。

    由于您将这条线与平面Y=0 相交,因此您只需找到线上“Y”段为0 的点。

    具体来说,在B + (E - B)*u = 0 中求解u,然后将其反馈到原始线方程中以找到X 和Z 分量。

    【讨论】:

    • 我不明白。当我还不认识你时,我如何定义这条线?另外,如果我最终得到它,我将如何应用该标量?
    • u 是一个未知数;让我试着这样说:一条线可以被认为只是一堆“排列”起来的点。对? u 是在您正在寻找的线上找到任何特定点的方法。您正试图找到位于Y=0 平面上的单点。一旦你有了u(可以找到它,因为你知道你想要u 的值使你的Y=0 子句为真),只需替换为A + (D - A)*u 以获得X,或替换为C + (F - C)*u 以获得Z .
    • 我不知道如何从-B / (E - B) 获得Y=0 的标量。目前看来,标量距离 Y=0 的距离比距离 Y=0 的距离更远。
    • 如果您使用 u = -B / (E - B) 并将其代入原始的线上点方程 <A + (D - A)*u, B + (E - B)*u, C + (F - C)*u>,您将得到两点之间的直线上相交的点Y=0.
    • 从视觉的角度来看,您的u 值是与Y=0 相交的两点之间的“距离”。例如,如果u=0,则<A,B,C> 位于Y=0。如果u=1,则<D,E,F> 位于Y=0。如果u=0.5,那么Y=0 正好在两点之间。如果u=2.0,则Y=0 更靠近您的第二个点,但距离等于您的点之间的距离并在其方向上的额外长度。流行语是“插值”。
    【解决方案2】:

    直线的方程是

    (x–x1)/(x2–x1)  = (y–y1)/(y2–y1) = (z–z1)/(z2–z1)  
    

    因此,使 y=0 生成交叉点的坐标。

    x = -y1 * (x2-x1)/(y2-y1) + x1 
    

    z = -y1 * (z2-z1) /(y2-y1) + z1 
    

    【讨论】:

    • 不应该float z = -y1 * (z2 - z1) / (y2 - y1) + z1;吗?
    • @user8709 是的。谢谢。已更正
    猜你喜欢
    • 2011-08-05
    • 2011-11-02
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2012-02-14
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多