Revit二开--解析几何 计算垂直向量
在revit二次开发中我们经常会遇到求法向量的问题,如果是圆弧、椭圆、平面等几何土元,直接可以获取其法向量。但是当遇到直线的时候,我们想绘制模型线,则必须创建sketchplane,要创建sketchplane那么必须有一个平面,要有这个平面则需要一个法向量,那么这个法向量怎么计算呢,有两种方法
方法一 顺序判断法
首先判断直线方向与x轴方向是否平行,不平行则用直线方向向量叉乘x方向向量 ,如果与直线与x平行则用直线方向向量叉乘y轴方向向量……
/// <summary>
/// 获取一个向量的任意垂直向量
/// </summary>
/// <param name="dir"></param>
/// <returns></returns>
public XYZ getNormal(XYZ dir)
{
var norm = default(XYZ);
if (dir.IsParallel(XYZ.BasisX))
{
norm = dir.CrossProduct(XYZ.BasisY).Normalize();
}
else if (dir.IsParallel(XYZ.BasisY))
{
norm = dir.CrossProduct(XYZ.BasisX).Normalize();
}
else if (dir.IsParallel(XYZ.BasisZ))
{
norm = dir.CrossProduct(XYZ.BasisX);
}
else
{
norm = dir.CrossProduct(XYZ.BasisX);
}
return norm;
}
方法二 解析几何法 向量点积等于零
a·b=0 {x1,y1,z1}·b=0 根据公式只需要构造任意一个与a垂直的向量b即可 b= {(y1+z1),(-x1+z1),(-x1-y1)} {x1,y1,z1}·{(y1+z1),(-x1+z1),(-x1-y1)} = 0
/// <summary>
/// 获取一个向量的任意垂直向量
/// </summary>
/// <param name="dir"></param>
/// <returns></returns>
public XYZ getNormal1(XYZ dir)
{
return new XYZ(dir.Y+dir.Z,-dir.X+dir.Z,-dir.X-dir.Y);
}