3d 在一定距离上制作平行多边形

3d 在一定距离上制作平行多边形,3d,geometry,3d,Geometry,我在三维空间中有一组点,由x,y和z坐标给出。这组点位于一个平面中(可以是某个角度),并形成一个多边形。我需要建立同一个多边形,平行于这个,在一定的距离。如何计算平行多边形点的δx、δy、δz 编辑:直线A到A1、B到B1等垂直于基准多边形 val deltaX = length * base.a / (base.a + base.b + base.c) val deltaY = length * base.b / (base.a + base.b + base.c) v

我在三维空间中有一组点,由x,y和z坐标给出。这组点位于一个平面中(可以是某个角度),并形成一个多边形。我需要建立同一个多边形,平行于这个,在一定的距离。如何计算平行多边形点的δx、δy、δz

编辑:直线A到A1、B到B1等垂直于基准多边形

    val deltaX = length * base.a / (base.a + base.b + base.c)
    val deltaY = length * base.b / (base.a + base.b + base.c)
    val deltaZ = length * base.c / (base.a + base.b + base.c)

式中,a、b和c是基准面方程的因子。 此外,如果我们将delta坐标添加到初始坐标,我们将得到所需的点坐标值

 deltaX = normal.x * distance / Length(normal)
 similar for y,z
其中
normal
是平面的法向量(平面方程中的
a、b、c
是该向量的对应分量)


通常法线是单位向量,在这种情况下不需要分母

您需要垂直于平面的方向。然后将方向与长度相乘,得到矢量位移

  • 取多边形ABC中不共线的三个点,计算法线方向

    normal = cross(A,B) + cross(B,C) + cross(C,A)
    normal = normal/mangitude(normal)
    
  • 求位移向量u,使
    A1=A+u
    B1=B+u

    u = length * normal
    
  • 循环以查找新坐标

    for i=1 to n
        P1(i) = P(i) + u
    next i
    

  • 我假设您正在编写代码的环境允许使用基本的线性代数,例如添加和缩放向量。

    详细说明您的答案:要检查A、B和C是否共线,可以使用标量积:| AB.AC |=| AB | | | | AC | cos(角度(AB,AC)),因此“A、B、C是共线的”等同于“| AB.AC |=| | | | | | | |@PierreBaret-如果它们是共线的,那么
    交叉(A,B)+交叉(B,C)+交叉(C,A)
    将是(接近)零向量。记住向量叉积
    A×B=cross(A,B)
    对于并行向量返回零。不需要进行额外的计算,当然也不需要采用如此多的向量范数。
    for i=1 to n
        P1(i) = P(i) + u
    next i