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);
        }

更多revit二開知識 請關注 唐僧課堂
唐僧課堂BIM開發


在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章