Revit二开--解析几何 计算垂直向量

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开发


在这里插入图片描述

发布了47 篇原创文章 · 获赞 51 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/binbinstrong/article/details/101669126
今日推荐