OpenCASCADE 3 Planes Intersection

eryar@163.com

Abstract. OpenCASCADE provides the algorithm to search the intersection point between 3 planes. If two of the planes are parallel or identical, will get no result.

Key Words. Plane Intersection

1.Introduction

由《高等数学》可知,如果一非零向量垂直于一平面,这向量就叫做该平面的法向量。平面上的任一向量均与该平面的法向量垂直。即平面上任一向量与法向量的点乘为0.

其中n为平面的法向量,M0M为平面上任两点表示的向量。此式是平面的点法式方程。

由于平面的点法式方程是x,y,z的一次方程,而任一平面都可以用它上面的一点及法向量来确定,所以任一平面都可以用三元一次方程来表示。

Ax+By+Cz+D=0

其中x,y,z的系数就是该平面的一个法向量,即n={A,B,C}。上式就是平面的一般方程。设三个平面的方程分别为:

上述三个平面恰交于一点的充分必要条件是方程组有唯一解,即它的系数行列式不等于零:

所以求三个平面交点的算法核心是对系数方程组的求解。

2.Algorithm

OpenCASCADE中也有计算三个平面交点的算法,使用类IntAna_Int3Pln。也是使用了直接的算法,即先根据平面的点法式方程计算出平面的一般式,再联立方程组,最后使用高斯Gauss消元法进行求解。其核心代码如下所示:

void IntAna_Int3Pln::Perform (const gp_Pln& P1, const gp_Pln& P2,
const gp_Pln& P3) {
done=Standard_False;
math_Matrix M(1,3,1,3);
math_Vector V(1,3);
P1.Coefficients(M(1,1),M(1,2),M(1,3),V(1));
P2.Coefficients(M(2,1),M(2,2),M(2,3),V(2));
P3.Coefficients(M(3,1),M(3,2),M(3,3),V(3));
math_Gauss Resol(M,gp::Resolution());
if (!Resol.IsDone()) {
empt=Standard_True;
}
else {
empt=Standard_False;
V=-V;
Resol.Solve(V);
pnt.SetCoord(V(1),V(2),V(3));
}
done=Standard_True;
}

算法首先根据平面的点向式数据计算出一般式的参数,使用的类gp_Pln的函数Coefficients(),代码如下所示:

inline void gp_Pln::Coefficients (Standard_Real& A,
Standard_Real& B,
Standard_Real& C,
Standard_Real& D) const
{
const gp_Dir& dir = pos.Direction();
if (pos.Direct()) {
A = dir.X();
B = dir.Y();
C = dir.Z();
}
else {
A = -dir.X();
B = -dir.Y();
C = -dir.Z();
}
const gp_Pnt& P = pos.Location();
D = -(A * P.X() + B * P.Y() + C * P.Z());
}

根据平面的一般方程的定义可知,x,y,z的系数即为平面的法向,所以根据平面的法向量可以确定一般式的系数A、B、C。再代入平面上的任一点计算出D。

最后使用高斯Gauss消元法求解方程组得到三个平面的交点。

3. Conclusion

OpenCASCADE中对三个平面的交点的计算使用了直接的算法,即联立方程组进行求解的方法。从中可以看出这些几何问题在OpenCASCADE中的求解也都是数学的应用题。对方程组的求解,微分、积分等数值方法更是核心中的核心,所以OpenCASCADE将TKMath放在了基础模块。

OpenCASCADE 3 Planes Intersection的更多相关文章

  1. Two analytical 2d line intersection in OpenCASCADE

    Two analytical 2d line intersection in OpenCASCADE eryar@163.com Abstract. OpenCASCADE geometric too ...

  2. Intersection between 2d conic in OpenCASCADE

    Intersection between 2d conic in OpenCASCADE eryar@163.com Abstract. OpenCASCADE provides the algori ...

  3. Intersection between a 2d line and a conic in OpenCASCADE

    Intersection between a 2d line and a conic in OpenCASCADE eryar@163.com Abstract. OpenCASCADE provid ...

  4. OpenCASCADE 平面求交

    OpenCASCADE 平面求交 eryar@163.com OpenCASCADE提供了类IntAna_QuadQuadGeo用来计算两个二次曲面quadric(球面.圆柱面.圆锥面及平面,平面是二 ...

  5. OpenCASCADE Conic to BSpline Curves-Hyperbola

    OpenCASCADE Conic to BSpline Curves-Hyperbola eryar@163.com Abstract. Rational Bezier Curve can repr ...

  6. Introduction of OpenCascade Foundation Classes

    Introduction of OpenCascade Foundation Classes Open CASCADE基础类简介 eryar@163.com 一.简介 1. 基础类概述 Foundat ...

  7. Qt with OpenCascade

    Qt with OpenCascade 摘要Abstract:详细介绍了如何在Qt中使用OpenCascade. 关键字Key Words:Qt.OpenCascade 一.引言 Introducti ...

  8. Overview of OpenCascade Library

    Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. 关键字Key Words:Ope ...

  9. OpenCASCADE 基础

    OpenCASCADE 基础 转载▼ 一直在用OCC作项目,但这方面的中文资料很少,看来OCC在中国还不是十分普及: 后来,项目中使用OCC和DirectX结合使用,取得了很好的效果: 随着OCC6. ...

随机推荐

  1. es6 --- 功能

    标记的模板文字 1.模板文字!确实很棒.我们不再会这样做…. const concatenatedString = "I am the " + number + "per ...

  2. jquery判断页面元素是否存在

    在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的. 例如: document.getElementById(& ...

  3. Angular2/Ionic2集成Promact/md2.md

    最近想找一套比较完整的基于Material风格的Angular2的控件库,有两个选择一个是Angular官方的Material2,但是这套库的DatePicker控件目前只能支持年月日,不支持时分秒, ...

  4. MVC5 + EF6 入门完整教程(转载)--01

    MVC5 + EF6 入门完整教程   第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比,增加了很多"约定". 直接讲这些 "约定&qu ...

  5. tgtadm和iscsiadm命令的用法

    一.tgtadm命令 tgtadm常用于管理三类对象:     target:创建new,删除,查看     lun:创建,查看,删除     account:创建用户,绑定,解绑定,删除,查看 语法 ...

  6. pycaffe 可视化常用

    net.params['layername'].[0]/[1] caffe的一个程序跑完之后会在snapshot所指定的目录下产生一个后缀名为caffemode的文件,这里存放的就是我们在训练网络的时 ...

  7. Percona Monitoring and Management (PMM)安装使用

    一.docker安装 参考:http://www.cnblogs.com/liuyongsheng/articles/6595353.html 二.Percona Monitoring and Man ...

  8. vue 退出动画无效解决方法

    遇到一个问题:给模态框加入退出动画,进入的动画效果是有的,可是退出的动画就没有了. 写个简单的结构: <div class="mask" v-show="warni ...

  9. Python安装selenium启动浏览器

    1:在Python运行火狐或谷歌的浏览器是需要下载相对应的驱动 例如:你想在Python中使用代码命令打开firefox的网页 如果没有安装驱动,直接运行的话会出下面的错误 所以我们要安装相对应的浏览 ...

  10. 05002_Linux的安装

    1.虚拟机VMware workstation的安装 (1)下载链接:VMware workstation下载 密码:52wt: (2)双击VMware-workstation-full-10.0.2 ...