当前位置: 首页 > news >正文

Open CASCADE学习|将双曲线转换为B样条曲线

圆锥曲线(Conic Section),又称圆锥截线,是二次曲线的一种,它是通过一个平面与一个双圆锥相交而生成的曲线。根据平面与圆锥的相交方式,圆锥曲线可以分为四种基本类型:椭圆、抛物线、双曲线和退化的圆锥曲线(包括点、直线和相交线)。

椭圆(Ellipse):

当平面与圆锥的侧面相交,且不穿过圆锥的顶点时,生成的曲线是椭圆。椭圆有两个焦点,所有点到这两个焦点的距离之和是一个常数,这个常数称为椭圆的长轴。

抛物线(Parabola):

当平面与圆锥的侧面相交,并且恰好穿过圆锥的一个顶点时,生成的曲线是抛物线。抛物线有一个焦点和一个直接rix(焦点到抛物线顶点的距离)。

双曲线(Hyperbola):

当平面与圆锥的侧面相交,并且与通过顶点的圆锥的生成线相交时,生成的曲线是双曲线。双曲线有两个焦点,所有点到这两个焦点的距离之差的绝对值是一个常数。

退化的圆锥曲线:

当平面与圆锥的相交方式导致曲线退化时,可以得到退化的圆锥曲线。这些退化情况包括:

点:当平面通过圆锥的顶点并与圆锥的生成线相交时。

直线:当平面与圆锥的侧面相交但不通过顶点,且与圆锥的生成线平行时。

相交线:当两个平面分别与圆锥相交,且这两个交线相交于一点时。

圆锥曲线在数学、物理和工程领域都有广泛的应用。例如,在天文学中,行星轨道可以近似为椭圆;在光学中,透镜和反射器的设计常常基于抛物线或双曲线的形状;在工程学中,桥梁和建筑物的结构设计也会用到圆锥曲线。

下面的代码实现将一个双曲线(Hyperbola)转换为B样条曲线(BSpline Curve),并打印出转换器的信息。

#define WNT
#include <gp_Hypr2d.hxx>
#include <Convert_HyperbolaToBSplineCurve.hxx>
void DumpConvertorInfo(const Convert_ConicToBSplineCurve& theConvertor)
{std::cout << "Degree: " << theConvertor.Degree() << std::endl;std::cout << "Poles/Weights: " << std::endl;for (Standard_Integer i = 1; i <= theConvertor.NbPoles(); ++i){const gp_Pnt2d& aPole = theConvertor.Pole(i);std::cout << i << ": " << aPole.X() << ", " << aPole.Y() << " w(" << theConvertor.Weight(i) << ")" << std::endl;}
​std::cout << "Knots: " << std::endl;for (Standard_Integer j = 1, m = 0; j <= theConvertor.NbKnots(); ++j){for (Standard_Integer k = 1; k <= theConvertor.Multiplicity(j); ++k){std::cout << ++m << ": " << theConvertor.Knot(j) << std::endl;}}std::cout << "==========================================" << std::endl;
}
​
void TestHyperbolaConvert(void)
{gp_Hypr2d aHyperbola;aHyperbola.SetMajorRadius(2.0);aHyperbola.SetMinorRadius(1.0);Convert_HyperbolaToBSplineCurve aConvertor(aHyperbola, 1.0, M_PI);std::cout << "Convert Hyperbola to BSpline Curve: " << std::endl;DumpConvertorInfo(aConvertor);
}
​
int main(int argc, char* argv[])
{TestHyperbolaConvert();return 0;
}
​

Convert Hyperbola to BSpline Curve:

Degree: 2

Poles/Weights:

1: 3.08616, 1.1752 w(1)

2: 4.94242, 2.39387 w(1.63022)

3: 23.1839, 11.5487 w(1)

Knots:

1: 1

2: 1

3: 1

4: 3.14159

5: 3.14159

6: 3.14159

==========================================

相关文章:

  • git仓库太大只下载单个文件或文件夹
  • 突破编程_前端_JS编程实例(分割窗体组件)
  • HarmonyOS 应用开发之RelationalStore开发
  • NoSQL之 Redis配置
  • 【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)
  • 在Windows的Docker上部署Mysql服务
  • Python数据结构与算法——数据结构(栈、队列)
  • 新网站秒收录技术,新网站百度收录时间
  • 揭秘LEAP模型:能源环境发展、碳排放建模预测及不确定性分析
  • ubuntu 22.04, (减少鼠标 多用键盘, 集中思路), sxhkd(按键)+xdotool(X11窗口工具)
  • 产品经理与产品原型
  • 自定义服务器 headscale headscale-ui 部署 docker
  • 在课堂中使用 ChatGPT 的 80 个方式(上)
  • 【Node.JS】koa
  • linux安装git
  • ----------
  • C# 免费离线人脸识别 2.0 Demo
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java比较器对数组,集合排序
  • Java教程_软件开发基础
  • JS基础之数据类型、对象、原型、原型链、继承
  • MySQL用户中的%到底包不包括localhost?
  • nginx 配置多 域名 + 多 https
  • oldjun 检测网站的经验
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue全家桶实现一个Web App
  • 大数据与云计算学习:数据分析(二)
  • 浮动相关
  • 前端面试题总结
  • 使用API自动生成工具优化前端工作流
  • 微信公众号开发小记——5.python微信红包
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $jQuery 重写Alert样式方法
  • (003)SlickEdit Unity的补全
  • (2015)JS ES6 必知的十个 特性
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • **CI中自动类加载的用法总结
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net Signalr 使用笔记
  • .net专家(张羿专栏)
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [20171101]rman to destination.txt
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C#]winform部署PaddleOCRV3推理模型
  • [c++] C++多态(虚函数和虚继承)
  • [C++] 统计程序耗时
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • [Docker]十.Docker Swarm讲解