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是相同的。

OpenCASCADE点向圆柱面投影的更多相关文章

  1. OpenCascade Primitives BRep-Cylinder

    OpenCascade Primitives BRep-Cylinder eryar@163.com Abstract. BRep is short for Boundary Representati ...

  2. 基于OpenCV进行图像拼接原理解析和编码实现(提纲 代码和具体内容在课件中)

    一.背景 1.1概念定义 我们这里想要实现的图像拼接,既不是如题图1和2这样的"图片艺术拼接",也不是如图3这样的"显示拼接",而是实现类似"BaiD ...

  3. 聊聊GIS中的坐标系|再版

    本文约6500字,建议阅读时间15分钟. 作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒 版权:转载请告知,并在转载文上附上转载声明与原文链接(https://www.cnblogs.com/ ...

  4. OpenCASCADE点向平面投影

    OpenCASCADE点向平面投影 OpenCASCADE的ProjLib类提供了解析曲线(直线.圆.椭圆.抛物线.双曲线)向解析曲面(平面.圆柱面.圆锥面.球面.圆环面)投影的功能,主要用来计算三维 ...

  5. OpenCASCADE点向直线投影

    OpenCASCADE点向直线投影 eryar@163.com 在GeomLib_Tool类中提供了计算指定点在曲线.曲面上的参数,这个算法具有通用性,即对任意曲线.曲面来反求点的参数. 本文主要结合 ...

  6. OpenCASCADE Rational Bezier Curves

    OpenCASCADE Rational Bezier Curves eryar@163.com Abstract. Although polynomials offer many advantage ...

  7. OpenCASCADE BRep Projection

    OpenCASCADE BRep Projection eryar@163.com 一网友发邮件问我下图所示的效果如何在OpenCASCADE中实现,我的想法是先构造出螺旋线,再将螺旋线投影到面上. ...

  8. OpenCASCADE Ring Type Spring Modeling

    OpenCASCADE Ring Type Spring Modeling eryar@163.com Abstract. The general method to directly create ...

  9. Make Helix Curve in OpenCASCADE

    Make Helix Curve in OpenCASCADE eryar@163.com Abstract. OpenCASCADE does not provide helix curve dir ...

随机推荐

  1. expect安装

    expect是在tcl基础上创建起来的,因此在安装expect之前需要安装tcl 安装TCL下载地址:http://www.tcl.tk/software/tcltk/download.html[ro ...

  2. 钉钉小程序----使用阿里的F2图表

    在钉钉小程序中使用F2的图表遇见很多问题 不能点击或者点击错乱的问题还没有解决,因为我解决不了........................... ------------------------- ...

  3. 【JZOJ6342】Tiny Counting

    description analysis 首先不管\(a,b,c,d\)重复的情况方案数是正逆序对之积 如果考虑\(a,b,c,d\)有重复,只有四种情况,下面括号括起来表示该位置重复 比如\(\{a ...

  4. 【JZOJ4616】二进制的世界

    description analysis \(DP\),这是\(Claris\)神仙的题-? 既然是\(2^{16}\)可以拆成两个\(2^8\)的位运算 照着打就行了 code #include&l ...

  5. Divide by Zero 2018 and Codeforces Round #474 (Div. 1 + Div. 2, combined)G - Bandit Blues

    题意:求满足条件的排列,1:从左往右会遇到a个比当前数大的数,(每次遇到更大的数会更换当前数)2.从右往左会遇到b个比当前数大的数. 题解:1-n的排列,n肯定是从左往右和从右往左的最后一个数. 考虑 ...

  6. 概率dp——cf148D

    求概率应该dp数组应该顺着求 这是由初始状态来决定递推方向的 /* 盒子里有两种颜色的球,一种是黑色另一种是白色 AB轮流去球,A先取 A每次随机摸一个球 B每次随机摸一个球,然后盒子里再丢一个球 先 ...

  7. [JZOJ 5782] 城市猎人

    思路: 并查集按秩合并维护出现时间. 最早连接时间就是树上连接最大值. \(qwq\)我居然把路径压缩和按秩合并打到一个程序里了...OvO #include <bits/stdc++.h> ...

  8. 有道云笔记新功能发现——有道云笔记剪报,完美解决不开会员保存csdn博客到本地的问题。

    怎么用 方法一:谷歌插件 方法二:http://note.youdao.com/web-clipper-chrome.html 添加到书签 功能: 能够把网页浏览的内容保存到有道云笔记 解决了自己的难 ...

  9. 关于Unity中脚本

    脚本编译: Unity可以把脚本编译为DLL,DLL将在运行时编译运行.这样可以提高执行 的速度,比传统的JavaScritp快20倍. 脚本具体的编译需要以下4步. 1: 所有的"Stan ...

  10. POJ-2253-Frogger-/Floyd-Warshall/

    Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sit ...