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://xiahunao.cn/news/2775431.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【开源】SpringBoot框架开发医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

讯飞星火认知大模型V3.5 python调用 Web API

具体参考 科大讯飞:星火认知大模型Web API文档 目录 1.首先要注册一个 讯飞星火账号&#xff0c;2. 按照自己的业务需求&#xff0c;翻看相关SDK开发文档&#xff0c; 如图1所示。3. 星火认知大模型Web API python示例源码文件共两个*接口请求与接口解析函数&#xff1a;Spark…

TCP和UDP相关问题(重点)——8.TCP的拥塞控制怎么实现的?

在某段时间内&#xff0c;若对网络中某一资源的需求超过了该资源所能提供的可用部分&#xff0c;网络性能就会变坏&#xff0c;比如在高速公路上行驶的车辆&#xff0c;如果一时期内涌入了太多的车辆&#xff0c;道路将变得拥堵&#xff0c;交通状况变差。网络中也是一样&#…

Quartus工程的qsf配置约束文件介绍

一、qsf文件概述 qsf&#xff1a;Quartus Setting File&#xff0c;是Quartus工程的配置文件&#xff1b; 包含一个Quartus工程的所有约束&#xff0c;包括工程的软件版本信息、FPGA器件信息、引脚约分配、引脚电平分配&#xff0c;编译约束和用于Classic TimingAnalyzer的时…

MATLAB环境下基于深层小波时间散射网络的ECG信号分类

2012年&#xff0c;法国工程学院院士Mallat教授深受深度学习结构框架思想的启发&#xff0c;提出了基于小波变换的小波时间散射网络&#xff0c;并以此构造了小波时间散射网络。 小波时间散射网络的结构类似于深度卷积神经网络&#xff0c;不同的是其滤波器是预先确定好的小波…

DMA直接内存访问,STM32实现高速数据传输使用配置

1、DMA运用场景 随着智能化、信息化的不断推进&#xff0c;嵌入式设备的数据处理量也呈现指数级增加&#xff0c;因此对于巨大的数据量处理的情况时&#xff0c;必须采取其它的方式去替CPU减负&#xff0c;以保证嵌入式设备性能。例如SD卡存储器和音视频、网络高速通信等其它情…

Vue中 常用的修饰符有哪些

Vue是一款建立在JavaScript框架上的开源前端库&#xff0c;已经成为当今前端开发人员最喜爱的选择之一。它的简洁语法和强大的功能使得开发者可以轻松地构建交互性的网页应用程序。在Vue中&#xff0c;修饰符是一个重要的概念&#xff0c;它们可以帮助我们更好地控制和定制DOM元…

【数据结构】二叉树的顺序结构及链式结构

目录 1.树的概念及结构 1.1树的概念 1.2树的相关概念 ​编辑 1.3树的表示 1.4树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1二叉树的概念 2.2现实中的二叉树 ​编辑 2.3特殊的二叉树 2.4二叉树的性质 2.5二叉树的存储结…

c++新特性override和final

override 作用: 在子类中重写父类的虚函数&#xff0c;我们可以在子类的虚函数声明后加上override。 上图就在重写eat()的时候&#xff0c;加上override。 作用: 1. 可以提示读者&#xff0c;这个函数是重写自父类中的。 2. 加上override之后&#xff0c;我们在重…

数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208)

数据库管理148期 2024-02-08 数据库管理-第148期 最强Oracle监控EMCC深入使用-05&#xff08;20240208&#xff09;1 性能主页2 ADDM Spotlight3 实时ADDM4 数据库的其他5 主机总结 数据库管理-第148期 最强Oracle监控EMCC深入使用-05&#xff08;20240208&#xff09; 作者&am…

实例分割论文阅读之:FCN:《Fully Convolutional Networks for Semantica Segmentation》

论文地址:https://openaccess.thecvf.com/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf 代码链接&#xff1a;https://github.com/pytorch/vision 摘要 卷积网络是强大的视觉模型&#xff0c;可以产生特征层次结构。我们证明&#xff0c…

Python解决SSL不可用问题

参考&#xff1a;https://blog.csdn.net/weixin_44894162/article/details/126342591 一、问题描述&#xff1a; 报错概述&#xff1a; WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ## 警告:pip配…

Project 2019下载安装教程,保姆级教程,附安装包和工具

前言 Project是一款项目管理软件&#xff0c;不仅可以快速、准确地创建项目计划&#xff0c;而且可以帮助项目经理实现项目进度、成本的控制、分析和预测&#xff0c;使项目工期大大缩短&#xff0c;资源得到有效利用&#xff0c;提高经济效益。软件设计目的在于协助专案经理发…

ubuntu原始套接字多线程负载均衡

原始套接字多线程负载均衡是一种在网络编程中常见的技术&#xff0c;特别是在高性能网络应用或网络安全工具中。这种技术允许应用程序在多个线程之间有效地分配和处理网络流量&#xff0c;提高系统的并发性能。以下是关于原始套接字多线程负载均衡技术的一些介绍&#xff1a; …

交通 | 共乘出行(下):基于图结构的动态多时空供需网络的均衡度量方法

博客&#xff1a;Alex Chin, & Tony Qin. (2023.02.25). Quantifying Efficiency in Ridesharing Marketplaces. Link: https://eng.lyft.com/quantifying-efficiency-in-ridesharing-marketplaces-affd53043db2 论文&#xff1a;Chin, Alex, and Zhiwei Qin. “A Unified…

Springboot根据环境读取application配置文件

目录 1. 首先创建两个不同配置文件 2. pom.xml 配置文件 3. 指定环境 4. 最后启动测试 1. 首先创建两个不同配置文件 分别为开发环境和生产环境 application-dev.properties 和 application-prod.properties application-dev.properties 配置为 1931 端口 application-pro…

CAN通讯协议详解

阅读引言&#xff1a; 本篇博文想给需要的人介绍一下CAN总线&#xff0c; 这个也算是我从B站学习记得笔记分享吧也算是。简单的介绍了CAN总线的大致内容&#xff0c; 简述支持CAN功能的STM32的简单使用例程。本视频的中的图片内容均来自B站爱上半导体博主的内容。 CAN高质量教学…

问题:在填制记账凭时,应注意以下几个方面:( ) #知识分享#其他

问题&#xff1a;在填制记账凭时&#xff0c;应注意以下几个方面&#xff1a;&#xff08; &#xff09; A:记账凭证各项内容必须完整 B:必须以审核无误的原始凭证为依据 C:记账凭证应连续编号 D:记账凭证的书写应清楚、规范。 参考答案如图所示

C++算法之双指针、BFS和图论

一、双指针 1.AcWing 1238.日志统计 分析思路 前一区间和后一区间有大部分是存在重复的 我们要做的就是利用这部分 来缩短我们查询的时间 并且在使用双指针时要注意对所有的博客记录按时间从小到大先排好顺序 因为在有序的区间内才能使用双指针记录两个区间相差 相当于把一个…

Leecode之随机链表的复制

一.题目及剖析 https://leetcode.cn/problems/copy-list-with-random-pointer/ 这个题目的意思就是拷贝一份复杂链表,难点在于它的random指针所指向的空间与拷贝下来的链表之间缺少一种联系,当然可以用遍历链表的方式通过value去找那块空间,不过时间复杂度太高. 二.思路引入 …