- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 GNU 科学库 (GSL) 绘制从 A 到 B 的平滑路径。我使用的 API 返回少量(在本例中为 8 个)不规则间隔的点(红色) ),您可以在下图中看到:
紫色点代表我希望看到从 GSL 返回的点。
首先,这种2D B-Spline形状可以用GSL得到吗?我不太了解 B 样条曲线,更不用说 2D B 样条曲线了。我能够获得显示的 B 样条曲线示例 here运行并创建一个流畅的 .ps 文件没有问题,但该示例使用带有以下代码的统一断点:
/* use uniform breakpoints on [0, 15] */
gsl_bspline_knots_uniform(0.0, 15.0, bw);
在我的例子中,鉴于我提供的数据不稳定且间隔不均匀,我是否必须使用非均匀结?我尝试使用 gsl_bspline_knots()
,以便在以下测试代码中使用非统一断点,但我真的不确定这是否是正确的方向。
#define NCOEFFS 8 // not sure what this number should be - number of data points?
#define NBREAK (NCOEFFS - 2)
const size_t nbreak = NBREAK;
int main (void) {
// (example code)...
gsl_vector *non_uniform = gsl_vector_alloc(nbreak);
// create some random breakpoint values
for (i=0; i<nbreak; i++) {
double val = gsl_ran_gaussian(r, 2.0);
printf("val: %f\n", val);
gsl_vector_set(non_uniform, i, val);
}
gsl_bspline_knots(non_uniform, bw);
// (more example code)...
}
此外,我将如何翻译上面在 2D x/y 坐标空间中绘制 B 样条曲线的示例?如果 GNU 科学库不适合这个,有人可以推荐更合适的 C/C++ 库吗?
任何方向上的帮助或指示将不胜感激。
最佳答案
首先:一维基样条
给定一组 NBREAK
断点 (t_1, ..., t_{NBREAK})
, 有 NCOEFFS=NBREAK+2
三次 b 样条组件 B_j(t)
.这些函数及其一阶和二阶导数始终是连续的,即使在断点处也是如此。因此,线性组合 f(t) = \sum m_j B_j(t)
给出的任何拟合也将共享这些属性(类似于自然三次样条)。 b样条分量的数量,NCOEFFS
,不需要等于数据点的数量,NDATA
.如果NCOEFFS < NDATA
,您应该使用最小二乘最小化来获得拟合(GSL 文档有一个很好的最小二乘计算示例来获得 b 样条拟合 here )。 NCOEFFS < NDATA
当数据包含噪声时是不错的选择,而您的情况似乎并非如此
系数个数不等于断点个数的原因,NCOEFFS=NBREAK+2
, 与处理基样条时没有指定边界条件有关。鉴于人们通常更熟悉自然三次样条,因此值得评论的是 natural cubic splines施加边界条件 d^2f(x)/dx^2=0
.这就是为什么使用三次多项式基础的自然三次样条的任何表示都会有 NCOEFFS=NBREAK
. Here is a link很好地解释了由三次多项式的系数给出的自由度的计数,这些系数表示自然 b 样条和施加连续性所需的方程数 f(t)
, df(t)/dt
和 d^2f(t)/dt^2
).
最后:使用 b 样条拟合参数曲线。
你有一组“数据”点(x_1, y_1)....(x_{NDATA},y_{NDATA})
并且您想构建参数拟合 P(t)=( f_1(t), f_2(t) )
.如果 NCOEFFS<NDATA
,则 B 样条拟合不会遍历所有数据点。 (如果您仔细选择断点和 NCOEFFS=N_DATA
,您可以要求这样做)。在我的研究中,我只使用一维非参数拟合 (y=f(x)
),但我相信这个参数案例是相似的。我会尝试以下操作
第 1 步:创建“数据”点集 (t, x) = {(1, x_1), (2, x_2)...(NDATA, x_{NDATA})}
并使用 gsl 1D b 样条曲线来拟合它们。这种合身会给你f_1(t) = sum_{i=1}^{NCOEFFS} mx_j B_j(t)
与 t \in [1,NDATA]
.
第 2 步:现在构建“数据”点集 (t, y) = {(1, y_1), (2, y_2)...(NDATA, y_{NDATA})}
并使用 b 样条曲线来拟合它们。这将为您提供f_2(t) = sum_{i=1}^{NCOEFFS} my_j B_j(t)
与 t \in [1,NDATA]
现在绘制P(t)=( f_1(t), f_2(t) ), t \in [1,NDATA]
.基本上,我在 2 个一维非参数拟合(这是 GSL 提供的)中映射了一个二维参数曲线问题。
最后一点是第一步和第二步的断点选择(以及基元数量 NCOEFFS
),只要覆盖范围 t\in[1, NDATA]
即可。和 NCOEFFS <= NDATA
,断点的选择是任意的。我相信,如果您选择断点为 {1, 3, ..., NDATA-2, NDATA }
拟合将通过数据点(注意我跳过了内部点 t=2
和 t=NDATA-1
这样 NBREAK=NDATA-2
和 NCOEFFS=NDATA
)。就是这样NAG库选择断点以获得插值拟合(意思是:通过数据点的拟合)。
关于c++ - 使用 GNU 科学库 (GSL) 使用不均匀分布的点绘制 2D B 样条路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24194909/
我有代码可以制作任意长度的二进制列表,并打开随机位数: rand_binary_list = lambda n: [random.randint(0,1) for b in range(1,n+1)]
假设我有 20 个攻击回合的回合制游戏,并且玩家的攻击速度决定了他们攻击的频率,当一个人的攻击速度为 5 时,您将如何计算和/或绘制一张“谁在何时攻击”的表格另一个速度为8? (这些是测试值,我将使用
我将我的类定义为: final class Key> { private final T q; private final T o; public Key(T q1, T o1
想象一下10辆车随机,均匀分布在长度为1的圆形轨道上。如果位置用[0,1>范围内的C double表示,那么它们可以排序,车之间的间隙应该是车的位置前面减去后面汽车的位置。最后一个间隙需要添加 1 来
我正在尝试构建一个均匀分布矩阵,每一行都以相同的速率衰减到 0。分布应该在 -1 和 1 之间。我正在看的是构建类似于以下内容的东西: [[0.454/exp(0) -0.032/exp(1) 0.6
我希望盒子像这样展开: 彼此正好相距 218 像素。 我试着把它们都放在一起,但我无法做到完美! .box1, .box2 { margin: 0 20px } 有没有更好的方法来解决这个问题? 忘了
所以我一直在构建一个程序,该程序使用蒙特卡罗模拟来寻找进化图论的属性。它的一个关键功能是能够生成均匀分布的随机图,这样我们就可以确定图的广义性质。对于连接无向图的情况,我已经实现了 this 中概述的
在响应式网站的页脚中,我需要均匀分布一些 li 项。 这是我想要实现的: 这就是我所拥有的: 我想避免为每个 li 设置绝对宽度,以保持网站这部分的响应能力。 继续进行的最佳方式是什么? 最佳答案 你
LinearLayout 的常见用法是平均空间(权重) View ,例如: 如何使用新的 ConstraintLayout 实现这样的等间距 View ? ConstraintLayout 引用链接:
如果我在一个集群中创建 3 个节点,我如何在容器之间均匀分布 docker 容器?例如,如果我创建一个由 3 个节点组成的集群,每个节点上有 8 个 cpu,我通过性能分析确定,当我在每个 cpu 上
我有一个包含 ViewModel 的 ObservableCollection,它又定义了我的按钮定义。 我已经做了几个小时了,一篇又一篇地阅读文章,但无济于事。我试过使用列表框,这是我最接近的。我的
如何使用 ConstraintLayout 获得 5 个均匀分布的正方形,并根据屏幕宽度设置灵活大小? 最佳答案 您需要创建一个连接在其父容器所有边上的小部件链(您可以将此父容器的尺寸设置为您想要/需
我有 100 个元素以随机顺序进入视口(viewport)。它们需要一起在 DOM 容器内形成一个圆圈。我需要一些方法来计算元素需要移动到的位置... 结构是这样的: http://codepen.i
我正在尝试在 Storyboard中为 iPad 和 iPhone 创建用户界面。 iphone 版本少了 1 个按钮。所有按钮和辅助 View 都固定在底部的 LayouGuide 上。此外,我正在
我正在向 添加图像和一些文本输入 (FloatLabelTextInput)在 react native 应用程序中。到目前为止,我在使用 flex 将图像和文本输入均匀分布在 y 轴上时运气不佳。
有一个导航栏 ,里面是一个每个 包含 带有链接(这是用于导航栏) 我查看了 Google 和这个网站,但找不到我要找的东西。 我想要的是能够保持我当前的风格(使用 和 在里面),我想要 在 内
我正在尝试创建一个布局,其中每个 DIV 的最大宽度为 300 像素。 如果屏幕是 600 像素,那么两个 100% 的 div 应该并排放置。如果屏幕是 700px,那么三个 233px(每个 DI
我实现了 Xorshift 生成器和其他生成器来比较它们在我的系统(Windows 和 Linux)上的性能。 https://en.wikipedia.org/wiki/Xorshift http:
我想通过收敛概率曲线图比较几种算法。 目前,我的图表如下所示: 这不允许看到许多曲线的差异。 我希望 y Axis 为“对数”,但与值 1 不同,即我希望 y 值为 [0, 1/2, 3/4, 7/8
我是一名优秀的程序员,十分优秀!