计算平面与平面的交线(附c++实现)

您所在的位置:网站首页 平面的交线怎么求 计算平面与平面的交线(附c++实现)

计算平面与平面的交线(附c++实现)

2024-01-11 01:50| 来源: 网络整理| 查看: 265

计算平面与平面的交线 理论基础:公式推导:程序实现:结果验证:

理论基础:

空间中的直线可由一点坐标和一方向向量来表示,在计算两平面的交线时,可先由两平面法向量的叉乘来得到交线方向向量,再求取直线上任意一点。

公式推导:

平面1:a1x+b1y+c1z+d1=0;平面2:a2x+b2y+c2z+d2=0 平面法向量;n1=(a1,b1,c1),n2=(a2,b2,c2) 交线的方向向量n=n1×n2=(b1c2-c1b2,c1a2-a1c2,a1b2-b1a2) 设直线上任意一点为(x,y,z) 令x=0,得: b1y+c1z+d1=0,b2y+c2z+d2=0, 即 y=-(c1z+d1)/b1=-(c2z+d2)/b2 解得: z=-(d1/b1-d2/b2)/(c1/b1-c2/b2) y=-c1/b1z-d1/b1 =c1*(d1/b1-d2/b2)/b1/(c1/b1-c2/b2)-d1/b1 由直线方向向量和一点坐标即可确定该直线

程序实现:

本程序是在pcl库的基础上用C++实现的,编程语言只是工具,领略其思想即可: (PS:程序只实现了基本的功能,并没有考虑特殊的情况,比如这里的b1不能为0,若要在实际中使用还需考虑各种特殊情况)

void calcLine(pcl::ModelCoefficients::Ptr coefsOfPlane1, pcl::ModelCoefficients::Ptr coefsOfPlane2, pcl::ModelCoefficients::Ptr coefsOfLine) { //方向向量n=n1×n2=(b1*c2-c1*b2,c1*a2-a1*c2,a1*b2-b1*a2) pcl::ModelCoefficients temcoefs; double a1, b1, c1, d1, a2,b2, c2, d2; double tempy, tempz; a1= coefsOfPlane1->values[0]; b1= coefsOfPlane1->values[1]; c1= coefsOfPlane1->values[2]; d1= coefsOfPlane1->values[3]; a2= coefsOfPlane2->values[0]; b2= coefsOfPlane2->values[1]; c2= coefsOfPlane2->values[2]; d2= coefsOfPlane2->values[3]; tempz= -(d1 / b1 - d2 / b2) / (c1 / b1 - c2 / b2); tempy= (-c1 / b1)*tempz - d1 / b1; coefsOfLine->values.push_back(0.0); coefsOfLine->values.push_back(tempy); coefsOfLine->values.push_back(tempz); coefsOfLine->values.push_back(b1*c2 - c1*b2); coefsOfLine->values.push_back(c1*a2 - a1*c2); coefsOfLine->values.push_back(a1*b2 - b1*a2); } 结果验证:

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3