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


在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值