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

news2025/3/14 21:05:35

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

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

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

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

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

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

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

下面,给出一个基于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~2
    TColgp_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~2
            tanLine(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.coloradmin.cn/o/1442000.html

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

相关文章

在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程

一、前期准备&#xff1a; 1.安装VMware 虚拟机软件&#xff08;不在讲解&#xff0c;可自行去下载安装&#xff09;。官网&#xff1a;https://customerconnect.vmware.com/cn/downloads/details?downloadGroupWKST-PLAYER-1750&productId1377&rPId111471 2.下载iso…

【Langchain Agent研究】SalesGPT项目介绍(一)

【2024最全最细LangChain教程-13】Agent智能体&#xff08;二&#xff09;-CSDN博客 之前我们介绍了langchain的agent&#xff0c;其实不难看出&#xff0c;agent是更高级的chain&#xff0c;可以进行决策分析、可以使用工具&#xff0c;今天我们开始开启一些更高阶的课程&…

mysql 中文编码问题

前言 最近在学springboot整合mybatisplus技术&#xff0c;用到mysql数据库&#xff0c;然后发现在windows下插入数据表会出现中文乱码现象 (例如 “我是谁” 在数据库中就成了 “???”) windows show variables like %char%;建表时, 设置默认charset为gbk create table u…

LayUI中表格树折叠 --

1、先将插件源码进行下载&#xff0c;新建 tableTree.js 文件&#xff0c;将源码放进去 2、将 tableTree.js 文件 配置之后&#xff0c;在需要使用的页面进行引入&#xff1a; layui.define(["tableTree"],function (exports) {var tableTree layui.tableTree;// …

Mac上几款好用的MacBook视频播放器

使用Mac电脑时&#xff0c;视频播放器可以说是我们使用频率最高的软件之一了&#xff0c;不管是工作时看视频资料还是在家里看下载好的电影&#xff0c;都需要用到视频播放器&#xff0c;本文中我们就来推荐几款好用的Macbook视频播放器&#xff0c;总有一款适合你&#xff01;…

OpenSSL 创建自签名证书

前言 Openssl 是一个方便的实用程序,用于创建自签名证书。您可以在所有操作系统(如 Windows、MAC 和 Linux 版本)上使用 OpenSSL。 自签名证书 创建我们自己的根 CA 证书和 CA 私钥(我们自己充当 CA)创建服务器私钥以生成 CSR使用我们的根 CA 和 CA 私钥创建具有 CSR 的…

vue3-内置组件-Teleport

Teleport <Teleport> 是一个内置组件&#xff0c;它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。 基本用法 有时我们可能会遇到这样的场景&#xff1a;一个组件模板的一部分在逻辑上从属于该组件&#xff0c;但从整个应用视图的角度来看…

如何通过ETL实现快速同步美团订单信息

一、美团外卖现状 美团作为中国领先的生活服务电子商务平台&#xff0c;其旗下的美团外卖每天承载着大量的订单信息。这些订单信息需要及时入库、清洗和同步&#xff0c;但由于数据量庞大且来源多样化&#xff0c;传统的手动处理方式效率低下&#xff0c;容易出错。比如&#…

盒子模型...

一&#xff0c;盒子模型 1.1网页布局的本质 1先准备好相关的网页元素&#xff0c;网页元素基本都是盒子BOX。 2利用CSS设置好盒子样式&#xff0c;然后摆放到相应位置。 3往盒子里面装内容。 1.2盒子模型 CSS盒子模型本质是一个盒子&#xff0c;封装周围的HTML元素&#xff…

结构体的大小以及内存对齐问题

结构体的大小怎么计算&#xff1f;什么是结构体的对齐&#xff1f; 首先想要直到结构体的大小需要先了解结构体的内存对齐。那么&#xff0c;什么是结构体的内存对齐&#xff1a; 什么是结构体内存对齐 结构体的对齐 就是 结构体类型数据在内存中按照一定的对齐规律储存。结…

【开源】SpringBoot框架开发校园电商物流云平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

Go语言每日一练——链表篇(四)

传送门 牛客面试笔试必刷101题 ----------------合并两个排序的链表 题目以及解析 题目 解题代码及解析 package main import _"fmt" import . "nc_tools" /** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方法名、参…

unity——ScriptableObject相关知识点【学习笔记/不足之处欢迎斧正/个人复习向/侵删】

一、相关简介 1.ScriptableObject是什么&#xff1a;Unity提供的一个数据存储基类 2.ScriptableObject的好处有哪些&#xff1a;文件配置、数据复用、更好的处理数据带来的多态性为 二、ScriptableObject的创建 1.自定义ScriptableOject数据容器 继承ScriptableObject类 在…

[BeginCTF]真龙之力

安装程序 双击安装 出现了安装失败的标签&#xff0c;开发者不允许测试。 查看Mainfest入口文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" android:versionCo…

Blender_pmx导出fbx

Blender_pmx导出fbx 学无止境&#xff1f; 相关链接&#xff1a; Blender教程&#xff1a; Blender中文手册介绍 — Blender Manualhttps://docs.blender.org/manual/zh-hans/2.79/about/introduction.htmlhttps://www.blendercn.org/https://www.blendercn.org/Blender下载…

dddddddddddddddddddd

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 磁盘满的本质分析 专栏&#xff1a;《Linux从小白到大神》 | 系统学习Linux开发、VIM/GCC/GDB/Make工具…

深度学习(13)--PyTorch搭建神经网络进行气温预测

一.搭建神经网络进行气温预测流程详解 1.1.导入所需的工具包 import numpy as np # 矩阵计算 import pandas as pd # 数据读取 import matplotlib.pyplot as plt # 画图处理 import torch # 构建神经网络 import torch.optim as optim # 设置优化器 1.2.读取并处理数据…

PWM输入输出

PWM&#xff08;Pulse Width Modulation&#xff09;即脉冲宽度调制&#xff0c;在具有惯性的系统中&#xff0c;可以通过对一系列脉冲的宽度进行制&#xff0c;来等效地获得所需要的模拟参量&#xff0c;常应用于电机控速、开关电源等领域。 PWM参数 PWM 中有三个重要参数&…

代码随想录算法训练营第四十七天(动态规划篇)| 416. 分割等和子集

416. 分割等和子集 题目链接&#xff1a;416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 思路 回溯——超时 首先想到之前的回溯算法&#xff0c;寻找数组中加和等于sum(nums)/2的子集&#xff0c;但对于大数组超时了&#xff1a; class Solution(object):def…

nodejs+vue高校实验室耗材管理系统_m20vy

用户功能&#xff1a; 登录后要有一个首页 比如:可以看见目前的耗材消耗记录&#xff0c;可做成图表菜单栏在左侧显示 1.个人信息管理 可以对基本信息进行修改&#xff0c;(修改密码时需要验证) 2.耗材管理&#xff08;耗材信息&#xff09; 普通用户可以查询当前相关耗材信息[…