已知向量a(x1,y1,z1)、b(x2,y2,z2)
一、判斷垂直判斷垂直,需要點積為0。公式為:
a*b=x1x2 y1y2 z1z2=0
在Revit中,您可以編寫以下代碼:
XYZ a = new XYZ(1, 0, 0);
XYZ b = new XYZ(0, 1, 0);
var result = a.DotProduct(b);
二、判斷平行
判斷平行,需要比值相同。公式為:
x1/x2=y1/y2=z1/z2=k
在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());
又或者,您可以編寫以下代碼,通過法向量點乘來判斷:
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中,由於double運算,會導緻出現偏差,所以,您要通過1或者-1來判斷平行的話,可能還需要通過絕對值減1,然後判斷是否小於0.00001。
祝您用餐愉快。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!