AutoCAD 如何计算仅由拟合点定义的样条曲线的终点切线?

2024-04-19

AutoCAD 允许将 SPLINE 实体存储在仅由以下定义的 DXF 文件中 拟合点,问题是,这样的样条定义有无限 数值正确的解决方案,Autodesk 不提供必要的 从给定的拟合点计算所需参数的信息。

tl;dr - 缺少的信息是估计的起点和终点切线 全局 B 样条输入切线的方向和大小 带有最终导数的插值,任何人都可以帮助计算这个值吗?

完整源代码在github上。 https://github.com/mozman/ezdxf/blob/master/exploration/spline_end_tangent_estimation.py

我使用 BricsCAD 进行测试,但“Trueview 2020”显示相同的结果。

1. 场景

仅给出拟合点,使用全局曲线插值,没有任何约束 获取由控制顶点定义的样条线:

# First spline defined by control vertices interpolated from given fit points
s = global_bspline_interpolation(points, degree=3)
msp.add_spline(dxfattribs={'color': 4, 'layer': 'Global Interpolation'}).apply_construction_tool(s)
# Second spline defined only by fit points as reference
spline = msp.add_spline(points, degree=3, dxfattribs={'layer': 'BricsCAD B-spline', 'color': 2})
doc.saveas(DIR / 'fit-points-only.dxf')

BricsCAD 从拟合点插值的样条曲线与插值定义的样条曲线不匹配 控制顶点:

2. 场景

除了拟合点之外,我还将起点和终点切线值存储在 DXF 文件中。 插值是通过带有末端导数的全局曲线插值来完成的 (Piegl & Tiller:“NURBS 书”- 第 9.2.2 章)。

我选择任意角度(100 度)作为起点和终点切线,即切线 震级是通过“总弦长”方法估计的。

m1, m2 = estimate_end_tangent_magnitude(points, method='chord')
start_tangent = Vector.from_deg_angle(100) * m1
end_tangent = Vector.from_deg_angle(-100) * m2
# First spline defined by control vertices interpolated from given fit points and end-tangents
s = global_bspline_interpolation(points, degree=3, tangents=(start_tangent, end_tangent))
msp.add_spline(dxfattribs={'color': 4, 'layer': 'Global Interpolation'}).apply_construction_tool(s)
# Result matches the BricsCAD interpolation if fit points, start- and end
# tangents are stored explicit in the DXF file.
# Second spline defined by fit points as reference
spline = msp.add_spline(points, degree=3, dxfattribs={'layer': 'BricsCAD B-spline', 'color': 2})
# set explicit start- and end tangent as unit vectors
spline.dxf.start_tangent = Vector.from_deg_angle(100)
spline.dxf.end_tangent = Vector.from_deg_angle(-100)
doc.saveas(DIR / 'fit-points-and-tangents.dxf')

BricsCAD 插值的样条曲线现在与由 BricsCAD 定义的样条曲线完全匹配 插值控制顶点:

现在我知道插值方法是正确的,我需要从拟合点渲染相同的样条线 因为 BricsCAD 是从拟合点推断出的方向和大小的端点切线。

3. 场景

我需要控制顶点来渲染 B 样条线,但是开始和 末端切线不像场景 1 那样存储在 DXF 文件中。 需要估计起点和终点切线,最佳结果如下: “5 点插值”来自“The NURBS Book”,Piegl & Tiller

tangents = estimate_tangents(points, method='5-points')
# Estimated tangent angles: (108.43494882292201, -108.43494882292201) degree
m1, m2 = estimate_end_tangent_magnitude(points, method='chord')
start_tangent = tangents[0].normalize(m1)
end_tangent = tangents[-1].normalize(m2)
# First spline defined by control vertices interpolated from given fit points and end-tangents
s = global_bspline_interpolation(points, degree=3, tangents=(start_tangent, end_tangent))
msp.add_spline(dxfattribs={'color': 4, 'layer': 'Global Interpolation'}).apply_construction_tool(s)
# Second spline defined by fit points as reference, but without explicit start- and end 
# tangents to see if my estimations are correct.
msp.add_spline(points, degree=3, dxfattribs={'layer': 'BricsCAD B-spline', 'color': 2})
doc.saveas(DIR / 'tangents-estimated.dxf')

令人惊讶的是,估计不正确,BricsCAD 样条线的切线角度为 101.0035408517495 和 -101.0035408517495 度。

真正烦人的部分是,如果我使用 BricsCAD 角度作为输入, 样条曲线仍然不匹配,所以我假设切线大小 估计与场景 2 不同。

4. 理论检验

以下值是根据 BricsCAD 保存的 DXF 文件计算得出的 SPLINE“方法”从“拟合点”切换为“控制顶点”。 根据这些数据,我计算了切线角度和大小,tangent vector = 2nd control vertex - 1st control vertex

required_angle = 101.0035408517495  # angle of tangent vector in degrees
required_magnitude = m1 * 1.3097943444804256  # magnitude of tangent vector
start_tangent = Vector.from_deg_angle(required_angle, required_magnitude)
end_tangent = Vector.from_deg_angle(-required_angle, required_magnitude)
s = global_bspline_interpolation(points, degree=3, tangents=(start_tangent, end_tangent))
msp.add_spline(dxfattribs={'color': 4, 'layer': 'Global Interpolation'}).apply_construction_tool(s)
msp.add_spline(points, degree=3, dxfattribs={'layer': 'BricsCAD B-spline', 'color': 2})
doc.saveas(DIR / 'theory-check.dxf')

现在样条线再次匹配:

  1. 如果给定切线(存储在 DXF 中),则输入切线的大小 插值函数是“总弦长”。
  2. 如果没有给定切线,则大小会有所不同,在此示例中:m1*1.3097943444804256, 但这不是一个恒定因素。

最大的问题是:如何估计起始切线和终止切线的方向和大小 像 AutoCAD 或 BricsCAD 那样仅由拟合点定义样条曲线?

提前致谢,

Manfred


我不得不面对同样的问题,我发现如果切线信息丢失,他们会使用自然类型的三次 B 样条插值。也就是说,它们强制要求曲线开头和结尾的二阶导数为零。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoCAD 如何计算仅由拟合点定义的样条曲线的终点切线? 的相关文章

  • B Spline(B样条曲线)

    文章目录 说明B样条曲线代码 说明 在阅读此博客前 xff0c 请访问2018级山东大学计算机学院图形学实验汇总 原笔记通过latex编写 xff0c csdn只支持latex部分功能 xff0c 所以下面主要是将pdf截屏上传 部分内容参
  • 将CAD文件导入AD软件

    1 第一步 将cad中的dxf或dwg文件保存好 2 打开AD 新建PCB文件 3 点击左上角文件flie gt import导入 gt DXF DWG文件 4 选择DXF DWG打开 设置线宽 设置选择原点 选择PCB层 打开条件为ALL
  • 如何从 x,y 点列表和偏移距离获取偏移样条线的 x,y 坐标

    我需要制作翼型轮廓曲线的偏移平行封闭体 但我无法弄清楚如何使所有点与主轮廓曲线上所需距离的点等距 this is my example airfoil profile this is my best and not good approac
  • 三次贝塞尔曲线上的最近点?

    如何沿着三次贝塞尔曲线找到最接近平面上任意点 P 的点 B t 我编写了一些快速而简单的代码来估计任意阶贝塞尔曲线的这一点 注意 这是伪暴力 而不是封闭式解决方案 Demo http phrogz net svg closest point
  • 定义 sympy 函数导数的数值计算

    如何在 sympy 中定义函数导数的数值计算 我有一些函数可以用函数的样条曲线来描述 并且它是使用 scipy interpolate 的导数 我想用这个函数操作一些表达式 然后用样条曲线计算表达式 我可以使用lambdaify 使 sym
  • 适用于 Android 的 catmull-rom 样条线

    我正在尝试找到一种在android平台上实现catmull rom样条线的方法 以便通过n个点平滑地绘制一条线 理想情况下 我能够通过 Path 及其cubicTo 方法调整三次贝塞尔曲线 如本线程中提到的 如何在 Android 中通过树
  • 求封闭二维均匀三次 B 样条的面积

    我有一个 2d 点列表 它们是封闭均匀三次 B 样条的控制顶点 Dx 我假设一条简单的曲线 非自相交 所有控制点都是不同的 我试图找到曲线包围的面积 如果我计算结点 Px 我可以将曲线视为多边形 那么我 只 需要找到每个线段的实际曲线和连接
  • 用java生成AutoCAD文件?

    有谁知道如何使用 Java 生成 AutoCAD 绘图吗 dfx 是一个好的界面还是我们应该使用 dwg 文件 我在网上找不到任何关于此的有用信息 开放设计联盟有用于生成 dwg 的库 但如果不成为会员 我就无法查看 API 而且他们似乎也
  • 如何避免在 GEKKO 中创建许多二进制切换变量

    我通过最小化数千个方程来求解 14 个变量IMODE 3 in GEKKO 每个方程都是真实响应与 P 样条模型预测之间的平方误差 i e 惩罚 B 样条 eq i m Minimize y true i spline coeffs kno
  • 如何使用 scipy 获得非平滑 2D 样条插值

    我想要一个二维三次样条拟合一些不规则的间隔数据 即一个完全拟合给定点处的数据的函数 但也可以返回之间的值 我所能找到的 对于不规则间隔的数据 是scipy interpolate SmoothBivariateSpline 我不知道如何关闭
  • scipy:插值轨迹

    我有一个由一系列序列形成的轨迹 x y 对 我想使用样条曲线在该轨迹上插入点 我该怎么做呢 使用scipy interpolate UnivariateSpline不起作用 因为两者都没有x nor y是单调的 我可以引入参数化 例如长度d
  • 在 R 中拟合平滑样条线(GAM 函数):拟合样条线所需的结数出现错误 - 结点要求增加

    我正在尝试将平滑样条拟合到看起来有两个峰值的数据 首先 我将平滑样条拟合到数据中 以识别结的潜在位置 library npreg library splines library mgcv x lt c 20 70 20 44 20 58 2
  • 使用 Python 实现 AutoCAD 自动化

    我对 Python 和 AutoCAD 非常陌生 所以请耐心等待 我正在尝试使用 Python 来自动化 AutoCAD 中的设计周期 到目前为止 我可以通过 Python 在 AutoCAD 中添加点和线 但我希望能够将线型更改为虚线 我
  • 计算贝塞尔样条曲线以从一个点到另一个点

    我在 X Y 旋转中有 2 个点 我需要计算平滑连接这两个点的贝塞尔样条线 二次贝塞尔曲线的集合 见图 点代表游戏中只能缓慢旋转的单位 所以从A点到B点 必须走很长的路 附图显示了一条相当夸张的弯曲路径 但你明白了 我可以使用什么公式来计算
  • LibGDX指导-精灵追踪2D无限随机贝塞尔曲线

    我已经能够将平滑的动画应用于我的精灵并使用加速度计控制它 我的精灵固定为沿 x 轴左右移动 从这里开始 我需要弄清楚如何创建一条垂直的无限波浪线供精灵尝试追踪 我的游戏的目的是让用户用加速度计控制精灵的左 右移动 试图尽可能地追踪永无止境的
  • 使用端点和凸出距离绘制圆弧。在 OpenCV 或 PIL 中

    在编写将 dxf 转换为 png 的脚本时 我需要绘制只有三个参数的圆弧 即圆弧的起点 圆弧的终点和凸出距离 我检查了OpenCV和PIL 它们需要开始和结束角度来绘制这个弧 我可以使用一些几何图形找出这些角度 但想知道是否还有其他我错过的
  • 贝塞尔曲线与线段的交点

    我正在用 Python 使用 pygame 编写一个游戏 它要求我为每个新游戏生成随机但美观的 海洋 经过长时间的搜索 我确定了一种涉及贝塞尔曲线的算法 如padlib py http www pygame org project Pyga
  • 如何从 dxf 文件解析 nurbs 曲面?或者你知道用于解析它的库(对于js,如果存在或任何其他语言)?

    我正在尝试解析 autocad nurbs 曲面并使用 JavaScript 中的 webGL 进行三角测量绘制 我已经在寻找 bjnortier 的 dxf 解析器 它支持大多数实体 如直线 圆弧 3Dface 折线 lwpolyline
  • AutoCAD 如何计算仅由拟合点定义的样条曲线的终点切线?

    AutoCAD 允许将 SPLINE 实体存储在仅由以下定义的 DXF 文件中 拟合点 问题是 这样的样条定义有无限 数值正确的解决方案 Autodesk 不提供必要的 从给定的拟合点计算所需参数的信息 tl dr 缺少的信息是估计的起点和
  • Caliburn micro 处于无应用程序对象模式,就像在 AutoCAD dll 插件中一样

    我正在使用 Caliburn Micro 开发 WPF 应用程序 该应用程序的一些视图需要加载到 AutoCAD 环境中 AutoCAD 编程环境允许开发 AutoCAD 插件 dll 类型 并将其加载到 AutoCAD 环境中 由于 Au

随机推荐

  • 访问数据库的用户列表

    我有一个 MySQL 数据库 由我的一群队友访问 有没有命令可以获取当前正在访问或已经访问并注销的用户的日志信息 从 mysql 工具运行以下命令来查看所有当前正在运行的进程 包括睡眠连接 SHOW PROCESSLIST 或者 您可以查询
  • 使用 JComboBox Java Swing 选择颜色

    我有一个 JComboBox 我想让用户在其中选择颜色 JComboBox 仅显示颜色 没有任何文本 我已经想出了这个解决方案 请告诉我这是否好或应该避免以及为什么 我对 Swing 和 Java 总体来说是新手 所以请耐心等待 publi
  • .gitattributes 中的“* text=auto eol=lf”和“* text eol=lf”有什么区别?

    这与这个问题非常相似 gitattributes 中的 text auto 和 text eol lf 有什么区别 https stackoverflow com questions 46590142 what is the differr
  • 合并(使用挤压)来自另一个分支的所有更改作为单个提交

    在 Git 中 有没有一种方法可以将一个分支的所有更改合并到另一个分支 但同时压缩为单个提交 我经常在单独的分支中开发新功能 并定期提交 推送 主要用于备份或将我正在开发的内容转移到另一台机器上 大多数这些提交都会说 Feature xxx
  • 如何更改datagridview中的行颜色

    我想更改 datagridview 中特定行的颜色 当列单元格 7 的值小于列单元格 10 的值时 该行应更改为红色 关于如何实现此目的有什么建议吗 您需要循环遍历 datagridview 中的行 然后比较每行上第 7 列和第 10 列的
  • Angular2 可观察定时器条件

    我有一个计时器 initiateTimer if this timerSub this destroyTimer let timer TimerObservable create 0 1000 this timerSub timer sub
  • 如何解决 WPF 中的“绑定表达式路径错误”?

    我将模型对象的可观察集合绑定到数据网格 但是当我将绑定设置到集合时 我收到了指向人员的路径错误 在调试此问题时 我检查了 CustomerModel 中的公共属性在 DataGrid 绑定中是否正确命名 而且返回到模型的集合不为空 我还检查
  • 为什么使用window.onload

    我尝试自己找到这个问题的答案 但只找到了有关如何使用 onload 事件的说明 我似乎没有抓住要点 我被告知 如果我希望在页面加载时发生某些事情 我应该像这样使用 window onload 但现在我自己思考 我想知道这样做的意义是什么 因
  • 将 forMine 设置为 false 进行搜索时,youtube v3 api 错误

    我正在编写一些函数Youtube API version 3 我在用python但在谷歌提供的测试控制台中确认了我的错误 我正在提出所有授权请求 只是没有在下面粘贴我的密钥 Python 客户端库自动添加forMine参数给我的Search
  • 如何在不暂存的情况下 git 添加新文件?

    为了有效地 并按预期 使用 git 我进行了小的原子提交 而我确实有更长的会话 我所做的不仅仅是一件事 因此 我大量使用git add p 不过 这不适用于全新的文件 因为我以后往往会忘记它们 我想做的是告诉git那里is一个新文件 我希望
  • 我在哪里可以学习编写词法分析器的基础知识?

    我想学习如何编写词法分析器 我的大学课程有一项作业 我们必须编写一个解析器 以及与之配套的词法分析器 但这是给我们的 没有任何指导或反馈 超出了标准 所以我并没有真正从中学到很多东西 搜索这个主题后 我只能找到相当高级的文章 这些文章重点关
  • 如何通过 UNC 加速 Powershell Get-Childitem

    DIR or GCI在 Powershell 中很慢 但在 CMD 中很快 有什么办法可以加快这个速度吗 在 CMD exe 中 经过亚秒级延迟后 其响应速度与 CMD 窗口可以跟上的速度一样快 dir remote server doma
  • OpenJPA 的 Maven 原型

    问候 我刚刚开始探索 Maven 我使用 m2eclipse 就像在 Eclipse 中使用 Maven 一样 我发现有一个基于休眠的原型 组 ID com rfc maven archetypes 和 工件 ID jpa maven ar
  • 使用矩形在图像上创建搜索区域

    我有一个显示图像的图像查看器 我想使用鼠标在图像上绘制一个矩形 并获取矩形的 x 和 y 坐标 X1 X2 Y1 和 Y2 我将使用这些坐标创建一个搜索区域 并在数组中查找最大值和最小值 该数组的两个轴上的像素数与图像的像素数完全相同 有人
  • 如何在C++中初始化结构体数组?

    我有以下内容struct在我的 C 代码中 我使用的是 Visual Studio 2010 struct mydata string scientist double value 我想做的是能够以快速的方式初始化它们 类似于 C99 中的
  • PHP- HTML 解析 :: 如何使用简单的 html dom 解析器获取网页的字符集值?

    PHP 如何简单地获取网页的字符集值html dom 解析器 http simplehtmldom sourceforge net utf 8 windows 255 等 备注 必须使用 html dom 解析器来完成http simple
  • Symfony2 createQuery 按字段排序

    你好 我在 phpmyadmin 中写了这个查询 它可以工作 gr8 SELECT u FROM users AS u WHERE u id 14469 OR u id 685 ORDER BY u id field u id 14469
  • FFMPEG - 连续的非单调 DTS

    我有几个需要连接的文件 有时文件工作和连接似乎没有问题 然后在其他文件上 文件不会连接 我得到 非单调 DTS 我一直在谷歌上搜索我应该对这些文件进行哪些处理 以便它们正确连接 但我仍然没有找到 有没有办法让所有文件的 DTS 完全相同 我
  • 是否可以使用不同的占位符掩码输入?

    由于我的表单没有标签 我希望能够在 Angular 和 Angular UI Utils Mask 中使用不同的占位符 div div
  • AutoCAD 如何计算仅由拟合点定义的样条曲线的终点切线?

    AutoCAD 允许将 SPLINE 实体存储在仅由以下定义的 DXF 文件中 拟合点 问题是 这样的样条定义有无限 数值正确的解决方案 Autodesk 不提供必要的 从给定的拟合点计算所需参数的信息 tl dr 缺少的信息是估计的起点和