OpenCascade Law Function
OpenCascade Law Function
1.Introduction
在OpenCASCADE的TKGeomAlgo Toolkit中提供了一个Law Package,在Law包中有一个基类:Law_Function,字面上翻译为 规则函数。其类图如下所示:
Figure 1. Law Function class diagram
本文主要对Law_Function的子类进行介绍,进一步理解OpenCASCADE中Law相关类的作用。
2.Law Functions
根据Law_Function可知,Law_Function的子类有常量规则Law_Constant、线性规则Law_Linear、组合规则Law_Composite及B样条规则Law_BSpFunc。抽象类Law_Function的纯虚函数有:
l Continuity(): 规则函数的连续性;
l Value():计算对应参数X的函数值Y;
l D1():计算规则函数在参数X处的一阶导数;
l D2():计算规则函数在参数X处的二阶导数;
l Bounds():规则函数的定义区间;
从上面的虚函数可以看出类Law_Function是一个一元变量的函数,与类math_Function的功能类似。
3.Test Code
下面的代码将规则函数Law_Function的几个子类通过生成Draw脚本,在Draw Test Harness中进行可视化,直观地显示出了几个规则函数,便于理解。
/*
Copyright(C) 2018 Shing Liu(eryar@163.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#include <TColgp_Array1OfPnt2d.hxx>
#include <Law_Constant.hxx>
#include <Law_Linear.hxx>
#include <Law_BSpFunc.hxx>
#include <Law_S.hxx>
#include <Law_Interpol.hxx>
#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")
#pragma comment(lib, "TKG2d.lib")
#pragma comment(lib, "TKG3d.lib")
#pragma comment(lib, "TKGeomBase.lib")
#pragma comment(lib, "TKGeomAlgo.lib")
Standard_Integer aId = 0;
void draw(const Handle(Law_Function)& theLaw, std::ostream& theOutput)
{
const Standard_Integer aStep = 20;
Standard_Real aFirst = 0.0;
Standard_Real aLast = 0.0;
Standard_Real aDelta = 0.0;
Standard_Real aX = 0.0;
Standard_Real aY = 0.0;
theLaw->Bounds(aFirst, aLast);
aDelta = (aLast - aFirst) / aStep;
theOutput << "polyline law" << ++aId;
for (Standard_Integer i = 0; i <= aStep; ++i)
{
aX = aFirst + i * aDelta;
aY = theLaw->Value(aX);
theOutput << " " << aX << " " << aY << " 0.0";
}
theOutput << "\n vdisplay law" << aId << std::endl;
theOutput << "vaspects law" << aId << " -setColor " << ((aId % 2) ? " red " : " yellow ") << std::endl;
}
void test(std::ostream& theOutput)
{
// 1. Constant law.
Handle(Law_Constant) aConstantLaw = new Law_Constant();
aConstantLaw->Set(2.0, 0.0, 1.0);
draw(aConstantLaw, theOutput);
// 2. Linear evolution law.
Handle(Law_Linear) aLinearLaw = new Law_Linear();
aLinearLaw->Set(1.0, 2.0, 3.0, 5.0);
draw(aLinearLaw, theOutput);
// 3. An "S" evolution law.
Handle(Law_S) aSLaw = new Law_S();
aSLaw->Set(3.0, 5.0, 6.0, 8.0);
draw(aSLaw, theOutput);
// 4. Provides an evolution law that interpolates a set of parameter and value pairs (wi, radi)
TColgp_Array1OfPnt2d aPoints(1, 4);
aPoints.SetValue(1, gp_Pnt2d(6.0, 8.0));
aPoints.SetValue(2, gp_Pnt2d(7.0, 5.0));
aPoints.SetValue(3, gp_Pnt2d(8.0, 9.0));
aPoints.SetValue(4, gp_Pnt2d(9.0, 2.0));
Handle(Law_Interpol) anInterpolativeLaw = new Law_Interpol();
anInterpolativeLaw->Set(aPoints);
draw(anInterpolativeLaw, theOutput);
}
int main(int argc, char* argv[])
{
std::ofstream aTclFile("d:/tcl/law.tcl");
test(aTclFile);
return 0;
}
程序会在d:/tcl中生成一个law.tcl文件,将此文件加载到Draw 中即可显示出规则函数对应的曲线,如下图所示:
Figure 2. Visualization Law Function Curves
由图可知,常量规则函数在定义区间内是一条直线;线性规则函数是一条直线;S型函数是S型的B样条曲线;插值函数是根据指定点插值得到的B样条曲线。
4.Conclusion
在OpenCASCADE中经常可以看到一些与Law相关的类,本文介绍了TKGeomAlgo中的Law包,综上所述可知,Law就是一元函数,与math_Function的概念一致。
本文显示规则曲线的方式可供借鉴,提高开发效率。只需要生成一个文本文件,就可以将结果可视化,对于其他三维的也是一样。
OpenCascade Law Function的更多相关文章
- Function Set in OPEN CASCADE
Function Set in OPEN CASCADE eryar@163.com Abstract. The common math algorithms library provides a C ...
- 通过百度echarts实现数据图表展示功能
现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解 ...
- OpenCascade B-Spline Basis Function
OpenCascade B-Spline Basis Function eryar@163.com Abstract. B-splines are quite a bit more flexible ...
- OpenCASCADE Trihedron Law
OpenCASCADE Trihedron Law eryar@163.com Abstract. In differential geometry the Frenet-Serret formula ...
- OpenCASCADE Expression Interpreter by Flex & Bison
OpenCASCADE Expression Interpreter by Flex & Bison eryar@163.com Abstract. OpenCASCADE provide d ...
- 齐夫定律, Zipf's law,Zipfian distribution
齐夫定律(英语:Zipf's law,IPA英语发音:/ˈzɪf/)是由哈佛大学的语言学家乔治·金斯利·齐夫(George Kingsley Zipf)于1949年发表的实验定律. 它可以表述为: 在 ...
- OpenCASCADE Interpolation - Lagrange
OpenCASCADE Interpolation - Lagrange eryar@163.com Abstract. Power basis polynomial is the most simp ...
- OpenCASCADE BRepTools
OpenCASCADE BRepTools eryar@163.com Abstract. OpenCASCADE BRepTools provides utilities for BRep data ...
- A Simple OpenCASCADE Qt Demo-occQt
A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...
随机推荐
- 自己编写的仿京东移动端的省市联动选择JQuery插件
概述 什么是插件,插件就是即插即用叫插件,很少的配置,很少的代码就可以用都项目里,之所以做这个插件,是因为做了一个省市区的联动,其他项目如果要用怎么办,难道在ctrl+c,ctrl+v?那样做太low ...
- linux dns子域授权 split分离解析 缓存dns服务器
DNS子域授权作用:适用于同一个DNS组织父/子域名的解析工作由不同的dns服务器负责父dns服务器应该有为子域名迭代的能力 上下级区域属于不同的机构管理:.cn与.Anonymous.cn.cn需要 ...
- MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)
MxNet有了亚马逊站台之后,声势大涨,加之接口多样化,又支持R语言所以一定要学一下.而且作为R语言的fans,为啥咱们R语言就不能上深度学习嘞~ -------------------------- ...
- R语言︱异常值检验、离群点分析、异常值处理
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:异常值处理一般分为以下几个步骤:异常 ...
- Filter的注册2
既然Filter是一种COM组件,使用前就必须先注册.Filter的注册程序为regsvr32.exe (位于操作系统目录的system32子目录下).假设现在有一个Filter文件,它的完整路径为C ...
- 版本控制工具--svn和git的使用(三) -----git的使用(1)
安装 git官网就有git各个系统的安装包,可以根据自己系统安装相应的安装包.window的git安装包 依据国内网速原因,将安装放到网盘里,链接: https://pan.baidu.com/s/1 ...
- WPF基础篇之空间布局
由于之前自己做的都是大多是B/S架构的项目,加入新公司,公司现在用的WPF,在WPF中一个比较重要的知识点:布局 在网上找到一篇比较好的介绍WPF布局的文章. 文章地址:http://www.cnbl ...
- SonarQube和Maven的集成
1.1. SonarQube简介 SonarQube是一款免费用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量通过插件形式,可以支持包括java,C#,C/C++,PL/S ...
- 【BZOJ3140】消毒(二分图匹配)
[BZOJ3140]消毒(二分图匹配) 题面 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正 ...
- 【BZOJ1216】操作系统(堆,模拟)
[BZOJ1216]操作系统(堆,模拟) 题面 题目描述 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示 ...