3d 在一定距离上制作平行多边形
我在三维空间中有一组点,由x,y和z坐标给出。这组点位于一个平面中(可以是某个角度),并形成一个多边形。我需要建立同一个多边形,平行于这个,在一定的距离。如何计算平行多边形点的δx、δy、δz 编辑:直线A到A1、B到B1等垂直于基准多边形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
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
是该向量的对应分量)
通常法线是单位向量,在这种情况下不需要分母您需要垂直于平面的方向。然后将方向与长度相乘,得到矢量位移
normal = cross(A,B) + cross(B,C) + cross(C,A)
normal = normal/mangitude(normal)
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