问题标签 [splines]

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.

0 投票
9 回答
3066 浏览

math - 点序列插值

给定空间中的任意点序列,如何在它们之间产生平滑的连续插值?

欢迎使用 2D 和 3D 解决方案。以任意粒度生成点列表的解决方案以及为贝塞尔曲线生成控制点的解决方案也受到赞赏。

此外,看到一个迭代解决方案可以在接收点时近似曲线的早期部分,这将是很酷的,因此您可以使用它进行绘制。

0 投票
2 回答
2569 浏览

.net - Reporting Services 折线图:如何更好地控制平滑曲线

我有一个为客户构建的报告,我需要在其中绘制 x 0-100,y 0-100。假设我有以下几点:

我需要将这些表示为平滑折线图,因为它的应用是印刷机的网点增益图。

这就是问题所在。这条线从 100,100(右上)到 2,24 都很好。但随后发生的情况是从 2,24 到 0,0,线从图形左侧弯曲,然后向下弯曲到 0,0。想象一下它把一个点放在-10,10。

我知道这是因为它使用的通用贝塞尔曲线算法和控制点的大分离,因此对其进行了很大的加权。

但是我想知道是否有人知道我可以控制它的方法。我已经尝试在现有控制点之间添加平均点,但它仍然曲线偏离图表,就好像它仍然很重。

我能想到的唯一其他答案是自定义绘制图表或查看Dundas Charts并使用其GDI+绘图支持。

但在我走那条路之前,有人有什么想法吗?


事情就是这样。我知道如何手动绘制曲线。问题在于 2 到 50 之间的权重如此之高。我尝试在低点和中点添加点,但它仍然在边缘弯曲。我将不得不去查看源代码并修改图表,看看我是否可以获取屏幕截图。

现在我只是让图表在 2 处停止,直到我能解决这个问题。

0 投票
1 回答
330 浏览

c - 将由轮廓样条构建的形状转换为简单的多边形

我已经从 truetype 文件中转储了字形,以便我可以使用它们。它们具有由二次贝塞尔曲线和线条组成的形状轮廓。我想为这些形状输出三角形,以便为用户可视化它们。

传统上我可能会使用 libfreetype 或 scan-rasterise 这种轮廓。但我想从字体中生成挤压的 3D 网格,并用它们进行其他变形。

那么,如何对由二次贝塞尔曲线和直线组成的形状进行多边形化?有许多轮廓一起形成了形状。一些轮廓是加法的,而另一些是减法的。轮廓永远不会打开。它们形成一个循环。

(实际上,我只从 ttf 字形获得轮廓顶点,这些顶点定义它们是否是曲线的一部分。即使很容易将它们分解为贝塞尔曲线和线条,但知道数据以这种方式表示可能对将轮廓多边形化为三角形)

0 投票
1 回答
2745 浏览

algorithm - 绘制锯齿状、像素完美的 1px 样条线(特别是 Catmull-Rom)

简要背景:我正在开发一个基于 Web 的绘图应用程序,需要绘制 1px 厚的样条线,这些样条线穿过它们的控制点。

我正在努力解决的问题是我需要在 p1 和 p2 之间绘制每个像素,就好像我使用的是 1px 铅笔工具一样。因此,没有抗锯齿和一次一个像素。这需要在不使用任何线条/曲线库代码的情况下手动完成,因为我的画笔系统依赖于像素坐标来将画笔笔尖应用于画布。

从本质上讲,我需要将像 Bresenham 算法这样的一个像素步进与 Catmull-Rom 方程返回的坐标相结合。我遇到了麻烦,因为 Catmull-Rom 点不是均匀分布的(所以我不能只说曲线中应该有 100 个像素并运行方程 100 次)。我尝试使用 X 和 Y 增量的最大值的估计起始值并用 Bresenham 填补空白,但由于四舍五入,我仍然会得到一些“脏”部分(即,这条线明显向上移动到对,但我仍然得到两个具有相同 Y 分量的像素,导致线条的“胖”部分)。

我很肯定这已经解决了,因为几乎每个绘制样条的图形程序都必须支持我所追求的干净像素曲线。然而,经过相当多的数学研究,我有点困惑,仍然没有解决方案。有什么建议吗?

编辑:这是我可能必须渲染的曲线示例:

替代文字

这可能会产生如下所示的预期结果(请注意,这是一个估计值):

替代文字

使用 Catmull-Rom 样条方程,我们需要四个点来创建一个线段。P0 和 P3 用作从 P1->P2 段的传入和传出方向的切线。使用 Catmull-Rom 样条,当 t 从 0 移动到 1 时,所有的蓝色部分都会被插值。可以复制 P0 和 P3 以确保渲染绿色部分,所以这对我来说不是问题。

为简单起见,我需要渲染 P1 和 P2 之间曲线上的像素,因为我有 P0 和 P3 形式的切线。我不一定需要使用 Catmull-Rom 样条,但它们似乎是这项工作的正确工具,因为必须通过控制点。插值点的不均匀分布让我陷入了循环。

EDIT2:这是一个例子,当我说我的结果曲线很脏时,我的意思是:

替代文字

红色箭头指出了一些不应该有像素的位置。发生这种情况是因为计算得到的坐标的 X 和 Y 分量不会以相同的速率变化。因此,当每个组件都被四舍五入(所以我有一个精确的像素位置)时,可能是 X 或 Y 没有被向上颠簸,因为计算的坐标是(42.4999, 50.98)。将回合换成地板或天花板并不能解决问题,因为它只是改变了它发生的位置。

0 投票
1 回答
1932 浏览

r - 如何用 ggplot2 绘制样条曲线?

我有一些数据要制作直方图。但是,我想用线条表示这个直方图。我试过使用freq_poly. ggplot2但是,生产的线非常参差不齐。我想知道是否可以使用splineswith ggplot2,这样产生的线条freq_poly会更流畅。

这就是我想要完成的。但我想使用ggplot2.

0 投票
1 回答
513 浏览

wolfram-mathematica - 从图中识别 Mathematica 插值函数(不​​是 Hermite)

我正在对 Mathematica 如何列出插值进行逆向工程:

编辑:谢谢,呜呜!那正是我想要的。作为参考,系数是(按顺序):

0 投票
4 回答
8421 浏览

python - 无论参数如何,scipy.interpolate.UnivariateSpline 都不平滑

我无法让 scipy.interpolate.UnivariateSpline 在插值时使用任何平滑。根据函数的页面以及之前的一些帖子,我相信它应该提供s参数平滑。

这是我的代码:

结果如下:

没有平滑的样条曲线

我已经尝试过使用一系列s值(0.01、0.1、1、2、5、50)以及显式权重,设置为相同的值(1.0)或随机设置。我仍然无法进行任何平滑处理,并且结的数量始终与数据点的数量相同。特别是,我正在寻找像第 4 点(7990.4664106277542、5851.6866463790966)这样的异常值来平滑处理。

是因为我没有足够的数据吗?如果是这样,我可以应用类似的样条函数或聚类技术来实现对这几个数据点的平滑吗?

0 投票
1 回答
1508 浏览

r - 从 ns 对象中提取结

我如何判断这个脊椎对象中的结在哪里?

str让我接近我需要的东西,但我希望能够提取样条线矢量,对其进行格式化,并将其打印在 Sweave 文档中。

0 投票
1 回答
721 浏览

r - R:在 RCRAN 档案(样条)中查找存档包

我正在寻找“样条线”包,它似乎不再存在?!有人告诉我,你可以在 rcran 档案中找到它——有人知道怎么做吗?

谢谢~

0 投票
2 回答
1820 浏览

graph - Graphviz splines=false has no effect on undirected graph with bi-directional a -- b/b -- a edges

I am drawing an undirected graph with Graphviz that has redundant edges, (e.g. A -- B and B -- A). I would like to see only one line between the two vertices, regardless of whether there is a redundant reverse edge in the data. My question is, is there a way to do this with Graphviz, without having to use some other tool/code first to remove the redundant edges? I have tried graph [splines=false]; without any success. Below is a minimal example:

And the output:

enter image description here

What I want as output is:

enter image description here

despite the redundant edges that may exist in the specified graph.