3d 给定三维空间中的两点,如何找到与它们相交的平面?

3d 给定三维空间中的两点,如何找到与它们相交的平面?,3d,intersection,point,arkit,plane,3d,Intersection,Point,Arkit,Plane,我想向arkit中的虚拟世界添加一个平面节点,前提是用户之前选择了两个点。两个点不足以定义唯一的平面。两个任意点共享的空间是一条直线——无限多个平面可以共享该直线(将它们作为旋转轴关联) 如果要基于用户选择的任意点定义平面,可以使用以下几个其他选项: 让用户选择三个点而不是两个点,因为三个点定义了一个唯一的平面。取由这些点构成的三角形的两条腿的叉积,你就得到了平面的法向量,它告诉你它的方向 选择两个点,然后假设在连接这些点的所有可能平面中,用户想要一个特定的点,比如说,其法向量最接近垂直的点。

我想向arkit中的虚拟世界添加一个平面节点,前提是用户之前选择了两个点。

两个点不足以定义唯一的平面。两个任意点共享的空间是一条直线——无限多个平面可以共享该直线(将它们作为旋转轴关联)

如果要基于用户选择的任意点定义平面,可以使用以下几个其他选项:

  • 让用户选择三个点而不是两个点,因为三个点定义了一个唯一的平面。取由这些点构成的三角形的两条腿的叉积,你就得到了平面的法向量,它告诉你它的方向

  • 选择两个点,然后假设在连接这些点的所有可能平面中,用户想要一个特定的点,比如说,其法向量最接近垂直的点。(更多的交叉产品可能会有所帮助。)

  • 假设用户想要一个水平的平面(平行于x-z平面)。对于水平平面,您只需要一个用户放置的点


从说明您正在寻找垂直平面开始:

  • 减去两个点以得到它们之间的线段:
    let segment=pointA-pointB
    或simliar
  • 取该向量与垂直轴的叉积,得到它们都位于的垂直平面的法向量:
    let normal=cross(segment,float3(0,1,0))
  • 法向量定义平面的方向,但您可能需要四元数或变换矩阵,以便可以将该方向与SceneKit一起使用。有一个四元数初始值设定项,可以让您从一个基向量旋转到另一个基向量,因此垂直平面的方向可以基于从垂直到计算法线的旋转:类似于
    node.simdOrientation=simd_quatf(from:float3(0,1,0),to:normal)

  • 谢谢你的回答。我的问题应该更详细一些。在我的例子中,我在寻找一个垂直面,这就是为什么我假设两点就足够了。在这种情况下,我将如何定义平面?