关于dxf文件中,多段线凸度的计算

news2024/10/6 1:38:37

1.前言

       在前面的CAD中的dxf文件解析(二)中讲到了一些CAD的dxf文件解析点、线、圆弧、圆、块等的思路。下面提供链接:

(二): CAD中的dxf文件解析(二):dxflib的使用_不爱学习 未完待续的博客-CSDN博客_dxflib

  (一):CAD中的dxf文件解析(一):准备工作_不爱学习 未完待续的博客-CSDN博客_dxf解析

关于官方demo文件的下载,还可以参考:

dxflib-src.rar_dxflib-互联网文档类资源-CSDN下载

Dxf_C帮助文档.zip-互联网文档类资源-CSDN下载

        今天主要说一下多段线数据的解析。

 2.多段线数据的解析

先看看多段线长什么样子

直观上看,多段线由线和圆弧构成,但是相邻的线、圆弧是连接起来的。但是从多段线在含义上看来,它其实是由一个个角点连接起来的。

如下面图1为一个多段线,图2所示,为dxf文本中对多段线的描述,LWPOLYLINE标记着进入多段线的描述(文件保存版本为2000以上),如果是POLYLINE则表示为比较老的标本。图3为对polyline的组码的说明,其中10,20之后的数据为角点的x,y坐标,42之后的数据为角点的凸度,其中为负说明圆弧的方向为顺时针方向,为正说明圆弧方向为逆时针方向。

               

 图1.多段线                        图2.多段线的dxf文本                           

               

图3.多段线的组码说明

如上面所说,多段线是由线和圆弧组成,对于线的话,则42后的数据为0或者没有,线的解析直接就是线起点和线终点。

如果42后的数据不为0,则角点和角点之间连接的为圆弧,圆弧的起点和终点也就是相邻角点的坐标,关键是怎么利用凸度的信息。

我们在CAD的help中找到对凸度的解释:凸度是四分之一圆弧段角的切线,如果从起点到端点,圆弧为顺时针,则为负数。凸度为 0 表示一条直线段,角点为连接直线的两个端点。凸度为 1 表示一个半圆。

凸度不为0时为圆弧,那如何来得到圆弧的圆心和半径信息呢?

这里我觉得yishang44这里解释的挺好,放上他计算的链接:

dxf中凸度的计算_yishang44的博客-CSDN博客_dxf凸度

为了防止他博客丢失,我在这里抛转做一些解释和说明吧。前面说到CAD里的说法是:凸度是四分之一圆弧段角的切线,这里用的是yishang44的图。

如果A1,A2为两个角点,那么四分之一圆弧角为图中,为圆周角,的圆心角,很显然。则A1,A2两个角点的凸度为。那现在

已知:角点A1,A2的坐标,

求:圆心、半径

这里用的方法是旋转变换公式来的,以A1,A2的中点A0为旋转中心,(r-H)为半径的点B进行顺时针旋转90°来得到圆心O,x0,y0为A0坐标,x,y为B坐标,其中B坐标可以根据向量公式来得到,其中

旋转公式为:

                     

 

这里的角度为90°,则公式变为:

                              

  

算得圆心坐标为: 

注意事项:

(1)如果用线段和圆弧元素来表示多段线,需要注意排序问题和数量问题;

(2)有的时候会判断多段线是否封闭,要看70后面的数值,如果是0则不封闭,为0是封闭的。

参考文献:(1)CAD help文件

                    (2)dxf中凸度的计算_yishang44的博客-CSDN博客_dxf凸度

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

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

相关文章

2024.2.22 C++QT 作业

思维导图 练习题 1>完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面。如果账…

如何将 .NET Aspire 应用程序部署到 Azure Container App

作者:Jiachen Jiang 排版:Alan Wang 最近发布的用于构建云原生应用程序的 .NET Aspire 与 Azure Container App(ACA)非常匹配。.NET Aspire 旨在轻松管理由一系列相互依赖的微服务组成的应用程序。Azure Container App 专为微服务…

Linux-时间接口-005

学习重点: 1.函数接口 2.【ls-l】命令的实现1【time】 1.1函数原型 【time_t time(time_t *tloc);】1.2函数功能 返回1970-1-1到现在的秒数(格林威治时间)1.3函数参数 1.3.1【tloc】 存放秒数空间首地址 存放的秒数:如果【t…

MySQL 窗口函数温故知新

本文用于复习数据库窗口函数,希望能够温故知新,也希望读到这篇文章的有所收获。 本文以:MySQL为例 参考文档: https://www.begtut.com/mysql/mysql-window-functions.html 使用的样例数据:https://www.begtut.com/m…

提高效率、降低成本:外贸企业必备好用ERP软件盘点

好用的外贸ERP软件有哪些?本期为您盘点的外贸ERP软件有:Zoho Books,孚盟M8,富通天下,睿贝软件。 外贸ERP系统是什么 企业资源规划(ERP)系统是一种先进的管理软件,尤其是在外贸和国际…

如何使用Docker部署开源Leanote蚂蚁笔记并发布个人博客至公网

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1. 安装Docker2. Docker本地部署Leanote蚂蚁笔记3. 安装…

通过eeprom验证FPGA实现的单字节/页读写IIC接口时序

1、概括 前文设计基于FPGA的IIC接口模块,本文将使用eeprom来验证该模块的设计。为了便于查看读写波形,采用两个按键来控制对eeprom数据的读写,当按键0按下后,FPGA向eeprom的前64个存储地址写入地址对应的数据,当按键1按…

文件上传漏洞--Upload-labs--Pass20--数组绕过

一、漏洞原理 漏洞来源:count()函数漏洞。 现自定义一个数组 arr[],定义arr[0]1,arr[3]2, 此时count(arr)的值为2,则arr[count[arr]]即为arr[2],但是arr[2]未定义,即为一个空值,若使用count()函数的本意是…

大数据计算技术秘史(上篇)

在之前的文章《2024 年,一个大数据从业者决定……》《存储技术背后的那些事儿》中,我们粗略地回顾了大数据领域的存储技术。在解决了「数据怎么存」之后,下一步就是解决「数据怎么用」的问题。 其实在大数据技术兴起之前,对于用户…

【TCP/IP】组播

一、组播介绍 组播(Multicast)是网络技术中数据传输的一种方法,它允许将数据包同时发送给一组指定的目标,而不是单个的目标(单播 Unicast)或所有可能的目标(广播 Broadcast)。组播传…

Python的自定义函数

Python的自定义函数 自定义函数的作用匿名函数语法示例 自定义函数语法示例 自定义函数的作用 定制化需求降低代码重复编写 匿名函数 匿名函数,可以用lambda关键字定义。通过lambda构造的函数可以没有名称,即在自定义匿名函数时,所有代码可…

【智能家居】7、主程序编写+实现语音、网络和串口功能

需要毕业论文私信有偿获取 截止目前mainPro.c代码 #include <stdio.h> #include <string.h>#include "controlDevices.h" #include "inputCmd.h"struct Devices *findDevicesName(char *name,struct Devices *phead){struct Devices *tmp=ph…

得物面试:Kafka消息0丢失,如何实现?

得物面试&#xff1a;Kafka消息0丢失&#xff0c;如何实现&#xff1f; 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面…

更改WordPress作者存档链接author和Slug插件Edit Author Slug

WordPress默认所有用户的存档永久链接都是/author/username/&#xff0c;不管是管理员还是订阅者或贡献者或作者或编辑。如果你想要自定义用户存档链接&#xff0c;比如根据角色不同使用不一样的author&#xff0c;或者自定义作者链接中的用户名Slug&#xff0c;那么建议考虑使…

Win32 获取EXE/DLL文件版本信息

CFileVersion.h #pragma once#include <windows.h> #include <string> #include <tchar.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 版本号辅助类 class CVersionNumber { public:// 无参构造CVersionN…

uniapp实现全局悬浮框

uniapp实现全局悬浮框(按钮,页面,图片自行设置) 可拖动 话不多说直接上干货 1,在components新建组件(省去了每个页面都要引用组件的麻烦) 2,实现代码 <template><view class"call-plate" :style"top: top px;left: left px;" touchmove&quo…

探索Redis是否为单线程的奥秘(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Redis中的多线程二. I/O多线程三. Redis中的多进程四. 结论五. 书籍推荐5.1 书…

OpenLayers水平镜像和垂直镜像

目录 1.前言2.概念介绍2.1 旋转2.2 水平镜像2.3 垂直镜像 3.要素的镜像3.1 镜像轴始终是水平的或者垂直的3.2 镜像轴是任意角度 4.图片的镜像5.总结 1.前言 最近项目中用到了要素和图片的水平镜像和垂直镜像功能。这些功能说难不难&#xff0c;说简单也不简单&#xff0c;就是稍…

【SQL注入】靶场SQLI DUMB SERIES-24通过二次注入重置用户密码

先使用已知信息admin/admin登录进去查下题&#xff0c;发现可以修改密码 猜测可能存在的SQL语句&#xff1a;UPDATE user SET password新密码 WHERE user用户名 and password旧密码 假设我们知道有个admin用户&#xff0c;但是不知道其密码&#xff0c;如何可以将其密码重置&…

[AIGC] 使用Curl进行网络请求的常见用法

使用Curl进行网络请求的常见用法 Curl是一个无比强大的工具&#xff0c;它可以用来获取和发送数据&#xff0c;支持众多的协议&#xff0c;包括HTTP、HTTPS、FTP、FTPS、SFTP和更多。它还支持HTTP POST&#xff0c;HTTP PUT&#xff0c;HTTPS证书&#xff0c;HTTP基础验证等。…