Dxf文件中多段线弧线的计算

news2024/11/17 20:32:19

要计算弧形的参数(包括起始角度、跨度角度以及包围弧形的矩形),我们首先需要理解一些基础知识:

  1. 弧的半径和中心:弧是圆的一部分,因此我们首先要计算整个圆的半径和圆心。
  2. 起始角度和跨度角度:弧的角度通常以度数表示,但在某些图形库中(如 Qt 的 drawArc 方法),需要以 1/16 度为单位来计算。

calArc 函数计算了圆的半径、圆心、矩形范围、起始角度和跨度角度。下面是对这些计算的详细解释和修正:

计算圆的半径和圆心

  1. 弧的半径:弧的半径是由弯曲程度(bulge)决定的。公式中弯曲程度通常是弧度的一部分。圆的半径可以由以下公式计算:

  1. 圆心:圆心的计算比较复杂,需要考虑弧的弯曲方向。通常,我们可以假设圆心在直线段的垂直平分线上,并计算出它的位置。

起始角度和跨度角度

  • 起始角度结束角度:通过计算从圆心到弧的起始和结束点的角度得到。这些角度可以使用 atan2 函数计算。

calArc 函数

calArc 函数,考虑了以上提到的因素:

#include <cmath>
#include <QRectF>
#include <QDebug>

void DxfAdapter::calArc(double x1, double y1, double x2, double y2, double bulge,
                              QRectF& rectangle, double& startAngle, double& spanAngle)
{
    // 计算弧的半径和圆心
    double dx = x2 - x1;
    double dy = y2 - y1;
    double distance = std::sqrt(dx * dx + dy * dy);

    // 计算半径
    double radius = distance / (2 * std::sin(bulge / 2));

    // 计算圆心
    double midX = (x1 + x2) / 2;
    double midY = (y1 + y2) / 2;
    double offset = radius * std::sqrt(1 - std::pow(distance / (2 * radius), 2));
    double offsetX = -dy * offset / distance;
    double offsetY = dx * offset / distance;

    double centerX = midX + offsetX;
    double centerY = midY + offsetY;

    // 计算圆弧的矩形范围
    rectangle = QRectF(centerX - radius, centerY - radius, 2 * radius, 2 * radius);

    // 计算起始角度和跨度角度
    double startAngleRad = std::atan2(y1 - centerY, x1 - centerX);
    double endAngleRad = std::atan2(y2 - centerY, x2 - centerX);
    startAngle = startAngleRad * 180 / M_PI;
    spanAngle = (endAngleRad - startAngleRad) * 180 / M_PI;

    // Qt 的 drawArc 使用 16分之一度的单位
    startAngle *= 16;
    spanAngle *= 16;

    qDebug() << "Arc calculated:";
    qDebug() << "Rectangle:" << rectangle;
    qDebug() << "Start Angle:" << startAngle;
    qDebug() << "Span Angle:" << spanAngle;
}

解释

  1. 半径计算:使用弯曲程度 bulge 计算圆的半径。
  2. 圆心计算:使用直线段的中点和弯曲偏移来确定圆心的位置。
  3. 矩形范围:计算圆的外接矩形。
  4. 角度计算:使用 atan2 计算起始角度和跨度角度,并转换为度数。Qt 的 drawArc 方法要求角度单位为 1/16 度,因此进行相应的转换。

请确保根据实际使用场景调整计算方法,因为不同的 CAD 软件和图形库可能有不同的弧计算标准。

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

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

相关文章

Vue3.0项目实战(二)——大事件管理系统登录注册功能实现

目录 1. 登录注册页面 [element-plus 表单 & 表单校验] 1.1 注册登录 静态结构 & 基本切换 2. 注册功能 2.1 实现注册校验 2.2 注册前的预校验 2.3 封装 api 实现注册功能 3. 登录功能 3.1 实现登录校验 3.2 登录前的预校验 & 登录成功 1. 登录注册页面 […

C++必修:异常

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. C语言处理错误的方式 一般而言&#xff0c;在程序方式异常时&#xff0c;C语言…

空间计量 | 似不相关回归SUR

通常情况下&#xff0c;研究X对于Y的影响时&#xff0c;Y只能为一个&#xff0c;如果有多个则重复进行多次&#xff0c;即每次都只考虑单一方程估计&#xff0c;如果有多个Y时&#xff0c;将多个Y同时进行联合估计有可能会提高估计效率&#xff0c;即模型的拟合能力更加接近于实…

计算机毕业设计选题推荐-博客平台-博客系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

嵌入式软件--数电基础 DAY 6

一、前情复习 1.存储电路的复习 我们刚开始接触的第一个存储电路是SR锁存器。但是SR锁存器存在诸多不足&#xff0c;比如我们不希望出现无意义的状态&#xff0c;于是我们有了D锁存器&#xff0c;再输入电路中加入非门电路&#xff0c;避免了无意义状态&#xff0c;但同时失去…

波导模式分析1 高度形变圆波导

摘要:略 简介&#xff1a;略 &#xff08;主要学习分析方法&#xff09; 在本文中&#xff0c;提出了一种宽带圆TE01模式转换器的设计方法。为了在宽频带内抑制寄生模式的生成&#xff0c;引入了高度变形的圆波导。对高度变形圆波导中的本征模的特性进行了理论分析。分析显示&…

【 html+css 绚丽Loading 】000026 五行吞灵盘

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

harbor部署+docker-compose

harbor部署 harbor介绍 Harbor 是一个开源的企业级容器镜像仓库&#xff0c;用于存储和分发 Docker 镜像及其他容器格式的镜像。 Harbor 提供了一个集中化的存储库&#xff0c;方便团队成员共享和管理容器镜像。你可以将构建好的镜像推送到 Harbor 仓库中&#xff0c;其他成…

CC1链_全网最菜的分析思路

文章目录 1 你必须知道的点1.1 反序列化利用链的起点是readObject()方法1.2 回顾反射执行系统命令1.3 相关类の功能简单介绍1.3.1 InvokerTransformer类1.3.2 ChainedTransformer类1.3.3 ConstantTransformer类1.3.4 总结一下上述3个类调用transform()方法的不同 2 CC1链的环境…

嘴上说“摆烂”的90后,考了最多的PMP证书......

现在&#xff0c;“摆烂”一词经常被大家挂在嘴边&#xff0c;但真正能够安心摆烂的人却没多少&#xff0c;特别是承担着社会主要劳动力的90后们。 大部分90后都是嘴上说着摆烂&#xff0c;但该卷的时候还是得卷&#xff0c;特别是在考证这件事上&#xff01; 一、PMP考生年龄…

缓存配置错误导致授权绕过

一个电子商务网站它有 2 个资产target.com admin.target.com target.com是面向用户的门户&#xff0c;用户可以去那里购买物品。admin.target.com基本上是卖家的管理门户&#xff0c;卖家可以在其中列出他们的物品&#xff0c;跟踪订单、客户信息等。 我通常使用 Autorize …

国产光耦合器的应用优势

国产光耦合器在近年来的技术发展中表现出了显著的应用优势&#xff0c;尤其是在电子和电力系统中。光耦合器作为一种广泛应用的电子元件&#xff0c;主要用于实现信号隔离、噪声抑制和电压转换等功能。随着国产品牌的不断崛起&#xff0c;国产光耦合器在性能、性价比以及供应链…

基于yolov8的8种人脸表情检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的人脸表情检测系统是一个结合了先进目标检测算法&#xff08;YOLOv8&#xff09;与深度学习技术的项目&#xff0c;旨在实时或离线地识别并分类人脸表情&#xff08;如快乐、悲伤、愤怒、惊讶、恐惧、厌恶、中立等&#xff09;。以下是一个简短的介绍…

四通道非洲猪瘟检测仪

四通道非洲猪瘟检测仪具有以下功能优势&#xff1a; 高效性能&#xff1a;四通道设计使得可以同时检测多个样本&#xff0c;大大提高了检测效率。这对于大规模养猪场或集中屠宰场来说尤为重要&#xff0c;可以快速筛查出可能感染非洲猪瘟的猪只。 高准确性&#xff1a;四通道检…

纯原生-如何在不破解情况下使用Android监听支付宝微信收款消息

具体思路&#xff1a; 首先支付宝微信收款均有到账通知&#xff0c;这是其app自带属性&#xff0c;也是为了提醒用户&#xff1b; 然后再规则范围内如何合理利用&#xff0c;在这里我们不说使用xposed这些工具&#xff0c;仅使用手机原生功能如何来做&#xff1b; 思路: 1、新建…

Python进阶06-Web服务器

零、文章目录 Python进阶06-Web服务器 1、HTTP协议 HTTP协议相关请参考HTTP协议详解网络相关内容请参考计算机网络详解 &#xff08;1&#xff09;HTTP协议 HTTP 协议的全称是(HyperText Transfer Protocol)&#xff0c;翻译过来就是超文本传输协议。超文本是超级文本的缩…

图为科技闪耀双展,AI之星智领未来

图为科技同期闪耀2024AGIC深圳(国际)通用人工智能大会与深圳国际电子展&#xff0c;晋升AI领域新星。 人工智能爆炸时代&#xff0c;每一场科技盛会的召开都预示着行业的新风向与无限可能。 作为边缘计算与人工智能领域的佼佼者&#xff0c;图为科技携带前沿技术与创新产品&a…

UI自动化测试 —— 下拉选择框弹出框滚动条操作实践!

前言 UI测试&#xff0c;也称为用户界面测试&#xff0c;是一种测试类型&#xff0c;旨在检查应用程序的界面是否工作正常&#xff0c;以及是否存在任何妨碍用户行为且不符合书面规格的BUG。UI自动化测试则是利用自动化工具来执行这些测试&#xff0c;以提高测试效率和准确性.…

【ubuntu使用笔记】使用timeshift备份ubuntu系统

使用timeshift备份ubuntu系统 安装timeshift sudo apt install timeshift建立备份点 sudo timeshift --create --comments "fist" --tags D查看备份点 sudo timeshift --list参考 三种Ubuntu系统全盘备份与恢复方法—tar、timeshift、systemback

linux访问github网速太慢 the remote end hung up unexpectedly问题

linux访问github网速太慢 the remote end hung up unexpectedly问题 pip install githttps://github.com/zhanghang1989/PyTorch-Encoding/时遇到fatal: the remote end hung up unexpectedly 原因 linux访问github网速太慢 措施&#xff1a; 确定ip&#xff1a; https://link.…