Open CASCADE学习|求圆的切线与切点

在几何学中,一个圆的切线被定义为与圆相切于一点的直线,而该点被称为切点。这意味着切线在切点处与圆仅有一个交点,并且在该点处,切线的方向与圆的半径垂直。

以下是关于圆的切线和切点的一些重要性质:

切线与半径的垂直性:在切点处,切线与通过该点的半径垂直。这是圆的切线最基本的性质,也是它得名的原因。

切点的唯一性:对于给定的圆和一条不在圆上的直线,它们最多只有一个切点。换句话说,一条直线不能与一个圆在多于一个点处相切。

切点在半径上的位置:切点到圆心的连线(即半径)与切线垂直。这是由切线与半径的垂直性直接得出的。

在解决与圆的切线相关的问题时,通常会用到这些性质。例如,要证明一条直线是圆的切线,可以通过证明该直线与圆在一点处相切,并且在该点处与半径垂直来实现。

此外,还有一些与圆的切线相关的定理和公式,如切线长定理等,这些都可以在解决几何问题时提供帮助。

下面,给出一个基于OCCT求解​圆的切线与切点的例子:

#include <gp_Lin2d.hxx>
#include <GccEnt_QualifiedCirc.hxx>
#include <Geom2d_Circle.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
#include <gp_Ax2.hxx>
#include <BRepBuilderAPI_MakeEdge2d.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <GccEnt.hxx>
#include <gp_Circ.hxx>
​
#include"Viewer.h"
​
​
#include <GccAna_Lin2dTanObl.hxx>
#include <TColgp_Array1OfLin2d.hxx>
​
int main(int argc, char* argv[])
{gp_Dir  Z(0.0, 0.0, 1.0);gp_Pnt center(0, 0, 0.0);gp_Pnt xr(0.5, 0, 0.0);gp_Pnt yr(0.0, 1.0, 0.0);gp_Pnt zr(0.0, 0.0, 7.0);gp_Ax2  wb(center, Z);gp_Circ  wbcircle(wb, 0.125 / 2);TopoDS_Edge wbe = BRepBuilderAPI_MakeEdge(wbcircle);TopoDS_Edge xline = BRepBuilderAPI_MakeEdge(center, xr);TopoDS_Edge yline = BRepBuilderAPI_MakeEdge(center, yr);TopoDS_Edge zline = BRepBuilderAPI_MakeEdge(center, zr);//GccAna_Lin2dTanObl//首先创建一个二维空间的圆//gp::OX2d()为X轴,1.0为圆的半径,以X轴的原点作为圆心,创建一个二维圆gp_Circ2d c(gp::OX2d(), 1.0);TopoDS_Edge ec = BRepBuilderAPI_MakeEdge2d(c);//创建一条二维直线,与X轴重合gp_Lin2d theLine(gp::OX2d());TopoDS_Edge el = BRepBuilderAPI_MakeEdge2d(theLine);//声明两个数组,可以存储生成的切线tanLine和切点tanP,索引为1~2TColgp_Array1OfLin2d tanLine(1, 2);TColgp_Array1OfPnt2d tanP(1, 2);//solver用于生成一条直线,该直线与圆c相切,并且与theLine成10度的夹角Standard_Real ang = 10;GccAna_Lin2dTanObl solver(GccEnt::Unqualified(c), theLine, ang / 180 * 3.1415926); //注意:该构造函数中角度单位为弧度//计算成功时,solver.IsDone() 为True,solver.NbSolutions()返回结果的个数if (solver.IsDone() && solver.NbSolutions() > 0){for (Standard_Integer i = 1; i <= 2; i++){// solver.ThisSolution(i)返回计算得到的直线gp_Lin2d类型,i为结果的索引,范围1~2tanLine(i) = solver.ThisSolution(i);Standard_Real ParSol;Standard_Real ParArg;//solver.Tangency1()用于计算切点,tanP为切点solver.Tangency1(i, ParSol, ParArg, tanP(i));}}TopoDS_Vertex TVl = BRepBuilderAPI_MakeVertex(gp_Pnt(tanP(1).X(), tanP(1).Y(),0.0 ));TopoDS_Vertex TV2 = BRepBuilderAPI_MakeVertex(gp_Pnt(tanP(2).X(), tanP(2).Y(), 0.0));TopoDS_Edge TL1 = BRepBuilderAPI_MakeEdge2d(tanLine(1));TopoDS_Edge TL2 = BRepBuilderAPI_MakeEdge2d(tanLine(2));Viewer vout(50, 50, 500, 500);vout << xline;vout << yline;vout << zline;vout << ec;vout << el;vout << TVl;vout << TV2;vout << TL1;vout << TL2;vout.StartMessageLoop();return 0;
}
​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/459596.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用于电机控制应用的动态制动电阻器了解下

大型直流和交流电机驱动器通常提供用于安装制动电阻器的端子。这些电阻器是什么&#xff0c;它们如何减慢机器的速度&#xff1f;必须考虑哪些危险和注意事项&#xff1f; 机械能 任何运动中的机器都具有动能。这种能量是一些储存的势能被“倾倒”到电机或执行器中的结果&…

ArcGIS学习(六)地理数据库

ArcGIS学习(六)地理数据库 上个任务我们讲了一个非常重要的知识点一一坐标系。这个任务我们带来另外一个很重要的知识点一一地理数据库。 地理数据库的内容相比于坐标系简单很多! 首先,先让我们来学习下地理数据库的理论。 ArcGIS 中的地理数据库(Geodatabase)是一个用…

FPGA_vga显示

一 VGA 1.1 VGA VGA是视频图像阵列&#xff0c;是一种使用模拟信号进行视频传输的标准协议。 1.2 VGA接引脚定义 VGA分公母两种&#xff0c;RGB显示标准。 1.3 VGA显示器 VGA显示器采用图像扫描的方式进行图像显示&#xff0c;将构成图像的像素点&#xff0c;在行同步信号…

Android中的MVVM

演变 开发常用的框架包括MVC、MVP和本文的MVVM&#xff0c;三种框架都是为了分离ui界面和处理逻辑而出现的框架模式。mvp、mvvm都由mvc演化而来&#xff0c;他们不属于某种语言的框架&#xff0c;当存在ui页面和逻辑代码时&#xff0c;我们就可以使用这三种模式。 model和vie…

【Linux】vim的基本操作与配置(上)

Hello everybody!今天我们要进入vim的讲解了。学会了vim,咱们就可以在Linux系统上做一些简单的编程啦&#xff01; 那么废话不多说&#xff0c;咱们直接进入正题&#xff01; 1.初识vim vim是一款多模式的文本编辑器&#xff0c;可以对一个文件进行编辑操作。 它一共有三个模…

分享一下 uniapp 打包安卓apk

首先需要安装 Java 环境&#xff0c;这里就不做解释了 第二步&#xff1a;打开 mac 终端 / cmd 命令行工具 使用keytool -genkey命令生成证书 keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore *testalias 是证书别名&am…

学生管理系统(javaSE第一阶段项目)

JavaSE第一阶段项目_学生管理系统 1.项目介绍 此项目是JavaSE第一阶段的项目,主要完成学生对象在数组中的增删改查,大家可以在此项目中发挥自己的想象力做完善,添加其他功能等操作,但是重点仍然是咱们前9个模块的知识点2.项目展示 2.1.添加功能 2.2.查看功能 2.3.修改功能 2…

数据库管理-第145期 最强Oracle监控EMCC深入使用-02(20240205)

数据库管理145期 2024-02-05 数据库管理-第145期 最强Oracle监控EMCC深入使用-02&#xff08;20240205&#xff09;1 监控方式2 度量配置3 阻塞4 DG监控总结 数据库管理-第145期 最强Oracle监控EMCC深入使用-02&#xff08;20240205&#xff09; 作者&#xff1a;胖头鱼的鱼缸&…

【C#】.net core 6.0 设置根目录下某个文件夹可访问,访问创建的图片等资源

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

移动光猫gs3101超级密码及改桥接模式教程

文章目录 超级管理员账号改桥接模式路由器连接光猫&#xff0c;PPPOE拨号即可&#xff01;附录&#xff1a;如果需要改桥接的话不知道拨号密码咋办打开光猫Telnet功能Telnet 登录 参考文章 移动光猫吉比特GS3101超级账号获取更改桥接 移动光猫gs3101超级密码及改桥接模式教程 …

蓝桥杯Web应用开发-CSS3 新特性【练习二:获得焦点验证】

页面上有一个姓名输入框和一个密码输入框&#xff0c;当聚焦输入框时&#xff0c;输入框的背景颜色会发生改变&#xff0c; 新建一个 index3.html 文件&#xff0c;在其中写入以下内容。 <!DOCTYPE html> <html lang"en"><head><meta charset&…

android studio下开发flutter

文章目录 1. 配置环境 https://flutter.cn/docs/get-started/install2. android studio下开发flutter 1. 配置环境 https://flutter.cn/docs/get-started/install 2. android studio下开发flutter 打开Android Studio -> File -> Settings -> Plugins 搜索Dart插件 …