【问题标题】:three js get tangent/intersection of sphere and segment三个js获得球体和线段的切线/相交
【发布时间】:2015-03-10 22:57:32
【问题描述】:

我有Vector3AVector3B

我需要知道Vector3 C(球体和线段 AB 的交点)。

获取此向量的最佳方法是什么?

我只需要一个向量,与精度或范围无关。

【问题讨论】:

    标签: three.js geometry


    【解决方案1】:

    在伪代码中

    dAB[1] = B[1] - A[1]
    dAB[2] = B[2] - A[2]
    dAB[3] = B[3] - A[3]
    
    rdAB = 1.0/sqrt(dAB[1]^2+dAB[2]^2+dAB[3]^2)
    
    C[1] = A[1] + R*dAB[1]*rdAB
    C[2] = A[2] + R*dAB[2]*rdAB
    C[3] = A[3] + R*dAB[3]*rdAB 
    

    其中dAB 是从AB 的向量,R 是球体的半径,rdAB 是向量dAB 的倒数长度。

    【讨论】:

      【解决方案2】:

      您可以将点 C 表示为点 A 和 B 的仿射组合

      C = (1-t)A + tB

      那么,向量 OC(其中 O 是球体的中心)应该具有大小 R(球体的半径)。从中可以得到 t 的二次方程,并且可以轻松求解 t。请注意,通常您应该得到两个 t 值,因为由 A 和 B 定义的无限线将与球体相交两次。因此,您应该只取 0 到 1 之间的 t 值。当直线 AB 与球体相切并且在所有当线 AB 不与球体相交时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 2011-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多