问题标签 [nurbs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何在同一个图形上绘制多条 NURBS 曲线?
我正在使用 NURBS-python,有一个名为 VisMPL 的模块,它将 NURBS 模块与 matplotlib 包装在一起。在 NURBS-python 的手册中,只介绍了如何绘制每条曲线。但我想在同一张图片上画几条曲线,以便比较近似的工作原理。代码如下。请帮忙。非常感谢!
在matplotlib中,有办法将一个图像添加到另一个图像,所以我猜对于VisMPL,也有办法,因为我不是家人,我不知道如何开始。
请帮助如何在同一张照片上获得两条曲线。谢谢。
python - 这是更新控制点时 NURBS-python 中的错误吗?
我使用 NURBS-python 发现了一个有趣的问题,但不确定这是故意这样做还是只是一个错误。我想用 2 个代码来介绍这个。
第一个应该与第二个输出相同,而不是。第一个成功更新了NURBS曲线的控制点并绘制了一条新曲线,
更改控制点列表的方式会影响结果。
而第二个只是简单地更新控制点,曲线本身并没有改变。
请帮忙,谢谢。
bspline - 使用 geomdl / nurbs 在 bspline 上的一点处查找半径(或曲率)
我想在 3D b 样条上找到给定点的曲率。我相信我想在该点使用样条的导数来计算该点的曲率,但我不明白如何。
我在 geomdl 中定义了一个 3D bspline(取自 SolidWorks(它的来源不相关))。我可以使用 Curve.evaluate_single() 评估样条曲线上的任何点。这似乎工作正常。我已经根据 SolidWorks 模型验证了返回的点,所以我假设我已经在 nurbs 中正确实施了 bspline。
我需要找到沿着这条曲线的各个点的半径。从我的谷歌搜索中,我认为我想使用 Curve.derivatives() 来计算该点的瞬时曲率。但我不明白如何将 Curve.derivatives() 的结果变成半径。
下面是 Curve.derivatives(SomePointOnPath,4) 的结果:
通过在该点的任一侧采取一小步,我计算出该点的半径约为 409(求解给定 3 个点的圆的半径)
我不明白 Curve.derivatives() 的结果告诉我什么。(第一个元组是点的坐标,超出了我就迷路了)
我预计这个特定点的半径约为 409。
我的基本问题是两个部分:
结果告诉我什么。他们的意思是什么。
我如何使用这些结果来计算此时的半径。
polygon - Catias 3dxml 格式是否包含作为 Nurbs 的 CAD,或者它只是一个三角形/多边形网格?
我很好奇 3DXML 实际上是网格还是 Nurbs。与 Catpart/Catproduct 组件相比,它是否受到限制?如果这不是一个好问题,我的背景不是 CAD 很抱歉
python-3.x - 使用CAD时如何用放码点对NURBS曲线进行放码?
当我们解析与CAD相关的DXF文件时,我们可以看到使用Gerber模型导出dxf的等级规则表文件和基本尺寸DXF文件。基准尺寸DXF提供了NURBS曲线上的一些结点,如何用分级规则表文件中定义的分级点对NURBS曲线进行分级?
有适合我的 java NURBS 库吗?
我搜索了一些研究:我们从DXF(CAD文件格式)中解析点,DXF中与NURBS曲线关联的权重默认为1,然后插入节点并获得控制点,然后可以绘制NURBS曲线,使用python 库python-nurbs 库
python - 将 scipy.interpolate.splprep 的输出转换为 NURBS 格式以进行 IGES 显示
我希望将描述任意曲线的一系列有序(非常密集)2D 点转换为 NURBS 表示,可以将其写入 IGES 文件。
我正在使用 scipy.interpolate 的 splprep 来获得给定一系列点的 B 样条表示,然后我假设 NURBS 定义基本上就是这样,加上所有权重都等于 1。但是我认为我从根本上误解了splprep 的输出,特别是“B 样条系数”与在某些 CAD 包中手动重新创建样条所需的控制点之间的关系(我使用的是 Siemens NX11)。
我尝试了一个从稀疏点集逼近函数 y = x^3 的简单示例:
它给出了以下参数:
我假设两组系数 (c_x, c_y) 描述了构造样条曲线所需的极点 (x,y) 坐标。在 NX 中手动尝试会得到类似的样条曲线,但并不完全相同,区间中的其他点的评估方式与 Python 中的不同。当我将此手动样条曲线导出为 IGES 格式时,NX 将节点更改为以下(同时显然保持相同的控制点/极点并设置所有权重 = 1)。
反过来,将 splprep 结 (t) 写入 IGES 定义(具有所述“控制点”和权重 = 1)似乎没有给出有效的样条曲线。NX 和至少一个其他软件包无法评估它,理由是“B 样条曲线的修剪或参数值无效”。
在我看来,至少有三种可能性:
- 从非有理 B 样条到有理 B 样条需要进行非平凡的转换
- IGES 样条有一个特定于应用程序的解释(即我对 splprep 输出的解释是正确的,但是在手动绘制/在 IGES 转换例程期间,NX 对此进行了简化/近似)。似乎不太可能。
- splprep 的系数不能以我描述的方式解释为控制点
通过比较所有权重 = 1 的 scipy B 样条(链接)和 IGES NURBS 样条的方程,我已经取消了第一种可能性(链接,第 14 页)。它们看起来相同,正是这一点让我相信 splprep 系数 = 控制点。
任何澄清上述任何点的帮助将不胜感激!
注意,我希望可以表示闭合曲线,所以如果可能的话,我想坚持使用 splprep。
编辑: 我认为首先使用 splrep 尝试这个过程会更简单,因为输出对我来说似乎更直观。我假设返回的系数是控制点的 y 值,但不知道它们对应的 x 位置。因此,我尝试使用这种矩阵方法从样条定义和输入数据中计算它们。C 矩阵只是输入数据。N 矩阵是对每个 x 值的每个基函数的评估,我使用此处显示的(略微修改的)递归函数进行了此操作。然后剩下的就是将 N 取反,并将 C 与它预乘以得到控制点。代码和结果如下:
导致:
我认为这是正确的,因为 P 的 y 值与 splrep、c 的系数相匹配。有趣的是,x 值似乎是节点平均值(可以单独计算如下)。也许这个结果对非常熟悉数学的人来说是显而易见的,但对我来说肯定不是。
现在,要将这些转换为 IGES NURBS,我认为这是定义归一化节点向量、将权重设置为 1 并包括上方的 P 个控制点的情况。我将其标准化如下,并在其下方包含了 IGES 文件。
但是,当我尝试将文件导入 NX 时,它再次无法在定义中说明无效的修剪参数。谁能告诉我这是否是一个有效的 NURBS 定义?
或者这可能是 NX 的一些限制?例如,我注意到当交互式绘制工作室样条曲线时,节点向量被迫(夹紧)均匀(正如 fang 所暗示的那样)。必须要求此约束(并且权重全部 = 1)才能唯一地定义曲线。有趣的是,如果我强制 splrep 使用统一的节点向量(即,夹紧但否则统一)返回样条表示,则会读入 IGES。尽管从 NX 的角度来看,我不认为这是必要的 - 它违背了目的首先要有一个 NURBS。所以这似乎不太可能,我循环想知道我对 splrep 输出的解释是否正确......有人可以指出我哪里出错了吗?
IGES 定义:
javascript - 如何在 Three.js 中对 N 面进行振荡动画
我想创建一个 NURBS 曲面,它使用 Three.js 进行振荡动画。
这是我对 NURBS 的初始化:
这就是我试图做的动画:
有什么建议吗?我没有在互联网上找到任何具有此主题的解决方案。
提前致谢!!!
spline - 如何使用goemdl / nurbs在另一个b样条上的点的法线平面上找到b样条上的点
所以第一个问题将是清楚地解释我所追求的。
我有两个非有理 3D b 样条。第一个 b 样条是引导样条。第二个 b 样条是参考,它本质上是第一个样条的“内部”。(样条线是在 Solidworks 中生成的)
想象一个圆形的游乐场滑梯。第一个样条是滑块的中心线。第二个样条是幻灯片的内边缘。
内样条线往往比中心样条线短。在任何给定点,内部的曲率也往往比中心的曲率大。
幻灯片的路径不是完美的圆形。但是内部样条总是与外部“平行”。(这里非常自由地使用平行这个词)
我追求的是:
给定沿中心曲线的一个点,我想找到内部曲线上的点,该点位于由该点的中心样条的切线的法线定义的平面上。
我在哪里:我在 python 中使用 geomdl 库来操作样条线。
我可以选择沿中心样条线的距离,从 geomdl 我得到 3D 点和该点的切线向量 (A,B,C),因此该点处的平面垂直于该点处的样条线。
我在做什么:
根据切线向量和点,我计算平面方程的形式为:Ax + By + Cz = D。
从那里我猜想在内样条上相同距离的点,并将其代入我已经拥有的平面的方程中。我使用 D 中的错误来猜测我应该以哪种方式来猜测内部曲线上的点可能真正在哪里。
[ 我知道在两条样条线的整个长度上可能有不止一种解决方案。即,如果曲线环绕超过 180°,则内侧曲线上将有不止一个点落在由中心曲线定义的平面上。在我感兴趣的当地,这不会是一个问题。任何第二个点也将离中心线很远。即正确的点距离中心点不超过 25 毫米。一个非本地点将至少在 3000 毫米之外。]
这主要是有效的。但有时它会失败。即,如果 D 非常接近 0,我的猜测将与答案不同。
目前我做了 10 个猜测,每个猜测的 delta 猜测都比上一个小。
我有很多这些要点要评估。我的解决方案需要 10 X 的计算次数,因此效率不是很高。
从我的谷歌搜索中,我相信在平面方程中使用 D 中的错误可能不正确。我“认为” D 是飞机到原点的距离。(是/否?)因此,我实际上是在比较两个飞机与原点的距离,而不是彼此之间的距离。如果我的猜测恰好在原点的“另一边”,那么距离可能相同但相反。
我的问题:解决这个问题的正确方法是什么?
我是否假设 D 是从平面到原点的距离?
在两点之间驱动 D 中的误差是否有效?
这样做的正确方法是什么?
用不同的方式重述我的问题
给定一个平面(Ax + By + Cz = D),我如何找到给定 b 样条上的点(使用 geomdl.bcurve)穿透(或重合)该平面?
(我在这里非常不知所措,所以如果这没有意义,请原谅)
google-chrome - 在 Web 浏览器中修剪 NURBS
如何在 Web 浏览器中渲染修剪过的 NURBS 曲面?
Three.js 在 2015 年放弃了添加此功能(问题 #3726)。有人说修剪后的 NURBS 可以使用纯 WebGL 渲染,但细节从未公开讨论过。