已知向量a(x1,y1,z1)、b(x2,y2,z2)

一、判断垂直

判断垂直,需要点积为0。公式为:

a*b=x1x2 y1y2 z1z2=0

怎么处理边缘相交的线revit(怎么判断2个向量之间是平行还是垂直)(1)

在Revit中,您可以编写以下代码:

XYZ a = new XYZ(1, 0, 0); XYZ b = new XYZ(0, 1, 0); var result = a.DotProduct(b);

怎么处理边缘相交的线revit(怎么判断2个向量之间是平行还是垂直)(2)

二、判断平行

判斷平行,需要比值相同。公式為:

x1/x2=y1/y2=z1/z2=k

怎么处理边缘相交的线revit(怎么判断2个向量之间是平行还是垂直)(3)

在Revit中,您可以編寫以下代碼:

XYZ a = new XYZ(1, 0, 0); //判斷向量平行,且方向相同 XYZ f = new XYZ(20, 0, 0); var result4 = a.Normalize().IsAlmostEqualTo(f.Normalize()); //判斷向量平行,但方向相反 XYZ g = new XYZ(-120, 0, 0); var resultg = a.Normalize().IsAlmostEqualTo(-g.Normalize());

怎么处理边缘相交的线revit(怎么判断2个向量之间是平行还是垂直)(4)

又或者,您可以編寫以下代碼,通過法向量點乘來判斷:

XYZ a = new XYZ(1, 0, 0); //判斷向量平行,當f4的值為1時,表示向量平行且同向 XYZ f = new XYZ(20, 0, 0); var result4 = a.Normalize().IsAlmostEqualTo(f.Normalize()); var f4 = a.Normalize().DotProduct(f.Normalize()); //判斷向量平行,當g5的值為-1時,表示向量平行但方向相反 XYZ g = new XYZ(-120, 0, 0); var result5 = a.Normalize().IsAlmostEqualTo(-g.Normalize()); var g5 = a.Normalize().DotProduct(g.Normalize());

怎么处理边缘相交的线revit(怎么判断2个向量之间是平行还是垂直)(5)

在Revit中,由於double運算,會導致出現偏差,所以,您要通過1或者-1來判斷平行的話,可能還需要通過絕對值減1,然後判斷是否小於0.00001。

祝您用餐愉快。

,