点投影到平面

Revit开发中经常会需要把其他标高的上的点投影到另一个标高的平面上,对于只需要在Z轴上投影,最简单的办法就是直接New一个新的XYZ,Z坐标换成新的平面的高度即可。但是如果平面不是XOY平面,或者任意的平面,这种做法就不好用了。下面实现一个简单的点投影到Plane的算法
假设有一个空间点P(10,20,30),有一个平面是由Origin(1,4,10)和Normal(0,0,1)确定,现在需要把把P投影到平面上:
在这里插入图片描述

//准备数据
var p=new XYZ(10,20,30);
var origin=new XYZ(1,4,10);
var normal=new XYZ(0,0,1);
var plane=Plane.CreateByOriginAndNormal(origin,normal);

public static XYZ Project(this XYZ point,Plane plane)
{
    //这个是从平面的Origin指向需要投影点的向量
	var vector=origin-point;
    //这个是点到平面的距离
    //其实distance是OP在平面plane的法向方向的投影距离,因为法向是单位向量
    //所以可以认为是P点到平面plane的距离
    var distance=vector.DotProduct(plane.Normal);
	//点投影到平面,其实就是计算点到平面的距离
    //因为知道了点到平面的距离,沿着法相的反方向便宜距离,就可以得到点在平面的投影点
    return point-plane.Normal.Normalize()*distance;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值