OpenCASCADE点向圆柱面投影

eryar@163.com

OpenCASCADE的类Extrema_ExtPElS提供了点到基本曲面的投影计算功能,距离可能是最大值或是最小值。如下图所示的点到圆柱的投影会有两个投影点P1和P2,则点到圆柱的距离的最小值是P到P1的距离,最大值是P到P2的距离。本文主要是对此类中点到圆柱的投影算法进行分析。

类Extrema_ExtPElS类中计算点到圆柱的投影源码列出如下:

结合源码的注释可以看出点P到圆柱S的投影主要按有如下步骤:

l 计算点P到以圆柱S轴线为法线的平面的投影点Pp;

l 若点P在轴线上,则计算失败返回;

l 计算点Pp在圆柱U方向的参数U1(角度);

l 将参数U1(角度)加180度得到参数U2;

l 计算参数(U1,V),(U2,V)对应在圆柱面上的点;

上述实现主要也是使用向量的运算,所以程序简单且性能高。其中保存的距离是距离的平方值,这种方式主要考虑的是自带的开方函数性能,除非后面要用到距离才会自己去开方,这样也是提供性能的一种处理方式。

OpenCASCADE的向量类gp_Vec提供了一个函数AngleWithRef(),查看源码可知这个函数主要是计算两个向量之间的夹角,其中参数向量Ref是用来处理角度的正负。当两个向量叉乘的向量与参考向量Ref反向时,也会将得到的角度值取负。

下面通过一个简单的小程序来将计算结果在Draw Test Harness中可视化,这样可以直观地验证一下:

将生成的脚本文件加载到DRAW中得到如下图所示的结果:

从上图可以看出,投影得到的两个点P1,P2的高度值与点P是相同的。

最新文章

  1. 如何设置redis中hash的field的expire ?
  2. ZeroMQ接口函数之 :zmq_msg_send – 从一个socket发送一个消息帧
  3. R爬虫知识点
  4. leetcode-【中等题】2. Add Two Numbers
  5. Table_EXISTS_ACTION=APPEND时导入数据时
  6. 《JavaScript高级程序设计》第3章 基本概念
  7. poj 2311
  8. 移植linux(1)
  9. VB IE 清除历史记录
  10. 自定义String类,并且实现在STL容器中添加自定义的类型
  11. [译] 什么是移动友好的 - Mobile-friendliness
  12. Android开发_关于中英文切换
  13. 卫星导航低噪声放大器芯片(LNA)-AT2659
  14. [转]设置Jupyter-Notebook表格打印多个变量的值
  15. Linux查看CPU、内存、进程使用情况(转)
  16. FL Studio中音频ASIO4ALL的设置
  17. VS复制文件到输出目录
  18. Solaris 10主机名和IP地址步骤
  19. P2633 Count on a tree
  20. inet_pton和inet_ntop inet_ntoa

热门文章

  1. D3.js(v3)+react 制作 一个带坐标与比例尺的柱形图 (V3版本)
  2. JDBC_数据库连接池工具类
  3. 再次封装ajax函数,统一入口
  4. python库之sklearn
  5. 数据库MySQL--基础查询
  6. Python自学:第五章 对数字列表执行简单的统计计算
  7. 安装xampp之后报错XAMPP: Starting Apache...fail.
  8. 校园商铺-4店铺注册功能模块-6店铺注册之Controller层的实现
  9. webstorm 初次上传代码到 远程gitlab中
  10. Java-Maven-pom.xml-porject-parent:parent