OpenCASCADE 3 Planes Intersection
OpenCASCADE 3 Planes Intersection
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消元法进行求解。其核心代码如下所示:
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(),代码如下所示:
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放在了基础模块。
PDF Version: OpenCASCADE 3 Planes Intersection
OpenCASCADE 3 Planes Intersection的更多相关文章
- Two analytical 2d line intersection in OpenCASCADE
Two analytical 2d line intersection in OpenCASCADE eryar@163.com Abstract. OpenCASCADE geometric too ...
- Intersection between 2d conic in OpenCASCADE
Intersection between 2d conic in OpenCASCADE eryar@163.com Abstract. OpenCASCADE provides the algori ...
- 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 ...
- OpenCASCADE 平面求交
OpenCASCADE 平面求交 eryar@163.com OpenCASCADE提供了类IntAna_QuadQuadGeo用来计算两个二次曲面quadric(球面.圆柱面.圆锥面及平面,平面是二 ...
- OpenCASCADE Conic to BSpline Curves-Hyperbola
OpenCASCADE Conic to BSpline Curves-Hyperbola eryar@163.com Abstract. Rational Bezier Curve can repr ...
- Introduction of OpenCascade Foundation Classes
Introduction of OpenCascade Foundation Classes Open CASCADE基础类简介 eryar@163.com 一.简介 1. 基础类概述 Foundat ...
- Qt with OpenCascade
Qt with OpenCascade 摘要Abstract:详细介绍了如何在Qt中使用OpenCascade. 关键字Key Words:Qt.OpenCascade 一.引言 Introducti ...
- Overview of OpenCascade Library
Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. 关键字Key Words:Ope ...
- OpenCASCADE 基础
OpenCASCADE 基础 转载▼ 一直在用OCC作项目,但这方面的中文资料很少,看来OCC在中国还不是十分普及: 后来,项目中使用OCC和DirectX结合使用,取得了很好的效果: 随着OCC6. ...
随机推荐
- 用jquery给select加选中事件
select在前端开发过程中很常用,现在我们要实现一个效果,那就是选中select中的某一项,执行事件,本来自己没怎么接触过这些,最后网上找了一些资料,自己研究了一下,把方法分享给大家,大家如果有需要 ...
- 使用Visual Studio2012调试Redis源码
Redis是一款C语言编写Key-Value存储系统,基于BSD协议开放源码,其源码托管在github上,大概有三万行. 源码地址:https://github.com/antirez/redis 源 ...
- 把asp:CheckBoxList 变成单选框
单选框代码 <asp:CheckBoxList runat="server" RepeatDirection="Horizontal" ID=" ...
- vue中使用滚动效果
new Vue({ el: '#app', data: function data() { return { bottom: false, beers: [] }; }, watch: { botto ...
- T-SQL函数类型——系统函数
1 ??? 为什么 123 和'123'的ISNUMERIC()返回结果相同. SELECT ISNUMERIC(123) --结果为1SELECT ISNUMERIC('123') --结果为1S ...
- 空宏-标C中空宏的妙用
空宏的作用: 1)编译指示: 2)方便阅读: 定义宏,并在预处理过程中将其替换为空字符串(即删除) 偶然的机会,看到了下面的C代码:ISC_PLATFORM_NORETURN_PRE static v ...
- 什么是Node.js?
Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适 ...
- Linux FTP客户端
1.File Zilla File Zilla是一个开源的,跨平台的Linux FTP客户端.File Zilla有一个标签式的用户界面,允许用户查看正在传输的文件的所有细节.File Zilla是通 ...
- Vue.js小demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [NOIP2009提高组]靶形数独
题目:洛谷P1074.Vijos P1755.codevs1174. 题目大意:给你一个数独,让你填完这个数独,并要求得分最大,问这个得分是多少(不能填完输出-1). 每个格子的得分是当前格子所填的数 ...