问题标签 [bspline]
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.
r - R中的约束平滑
我想根据一些数据生成一条连续的曲线,但是曲线需要满足一些约束:
- 曲线的所有值都在区间 [0,1] 上。此区间之外的值是不可解释的。
- 我想指定确切的开始和结束值: f(1) = 1 和 f(last) = 0
- f(x) 的导数始终为负数或 0。
数据点也遵循这些规则。
现在,我正在使用 fda 包中的 smooth.monotone 来适应使用 create.bspline.basis 创建的 bspline 基础。这对于保持节点之间的单调性非常有效,但生成的曲线似乎在 1 之上和 0 之下冒险。
有没有办法指定曲线拟合必须经过的点,或者曲线不能离开的区间?
opengl - 在 OpenGL 中渲染 B 样条曲线
我一直在研究一个 OpenGL 项目,该项目本质上是绘制 b 样条曲线的练习。我的程序没有返回错误,但曲线不会显示。
给定一个名为“coords”的长度为 13 的控制点数组(控制点本身都在屏幕上可见),这是我的代码:
其中“NofU”代表混合函数:
当我尝试打印语句时,我会得到非常大或非常小的坐标值,或者只是 0。
opengl - gluLookAt 问题
我一直在尝试在 OpenGL 中创建一个过山车模拟器,它使用一系列 gluLookAt 调用来使相机“乘坐”过山车。过山车本身基于带有坐标数组中控制点的 b 样条曲线。b0(u)、b1(u) 等是 b 样条曲线的混合函数,bprime0(u) 等是它们的导数。这是我的代码的相关部分:
空格键切换 'rotateCam' 变量,它应该在两种查看模式之间切换;一个围绕过山车环绕相机(“if”语句)和一个骑过山车(“else”语句)。
事情是这样的:盘旋模式工作正常,模式之间的切换工作正常,但相机在“骑行”模式下总是静止的。printf 语句显示 x、xprime、y、yprime 等都随着每个计时器滴答而变化,但相机从不移动。
如果需要更多代码,请告诉我。
graphics - 贝塞尔补丁如何在犹他茶壶中工作?
我过早地发布了一个代码高尔夫挑战赛来使用这个数据集(只是茶壶)绘制犹他茶壶。(修订和发布的茶壶挑战)但是当我更深入地查看数据以提出一个小例子时,我意识到我不知道这些数据发生了什么。我对二维贝塞尔曲线有很好的理解,实现了 deCasteljau。但是对于 3D,它的工作原理是否相同?
是的!确实如此!
数据包含每个包含 16 个顶点的补丁。是否有关于这些布局的标准顺序?如果它们对应 2D 曲线,那么四个角点实际上接触表面,其余 12 个是控件,对吗?
是的!
我的“原始计划”是将形状简化为矩形,将它们投影到画布上,并以灰色绘制填充形状,该灰色由垂直于光矢量的补丁的点积的大小计算得出。如果我把它简化这么多,它甚至会看起来像一个茶壶吗?是否必须使用光线追踪来获得可识别的图像?
那是主观的。:-(
虽然这可能看起来像几个问题,但它们都是这个问题的各个方面:“请,好心的大师,教我一些贝塞尔补丁?我需要知道什么来画茶壶?”
这是我到目前为止编写的代码。(使用这个矩阵库:mat.ps)
这是我非常糟糕的形象:
更新:错误修正。也许它们毕竟是“正常”布置的。选择正确的角至少会给出对称的形状:
更新:边界曲线看起来更好。
cuda - 涉及相邻元素的推力矢量变换
我有一个向量,我想使用 CUDA 和推力转换执行以下操作:
我应该如何正确实现这一点?我可以做到的一种方法是使用向量 w,然后将推力::变换应用于 v 并将结果保存到 w。但是k提前是未知的,我不想创建w1,w2,...浪费大量的GPU内存空间。最好我想尽量减少数据复制的数量。但我不确定如何使用一个向量来实现这一点,而这些值不会相互影响。Thrust 提供的东西可以做到这一点吗?
cuda - 涉及去除向量元素的推力向量变换
我有一个推力 device_vector 分成 100 个块(但在 GPU 内存上完全连续),我想删除每个块的最后 5 个元素,而不必重新分配一个新的 device_vector 来将其复制到。
我怎样才能正确地实现这一点?最好我想避免在 GPU 内存中分配一个新向量来保存转换。我知道有处理这些类型的操作的推力模板函数,但我很难将它们串在一起。Thrust 提供的东西可以做到这一点吗?
c++ - 实现 De Boors 算法以在 B 样条上查找点
我已经为此工作了几个星期,但无法让我的算法正常工作,我束手无策。这是我所取得的成就的说明:
如果一切正常,我希望最后有一个完美的圆形/椭圆形。
每次添加新的控制点(黄色)时,都会重新计算我的样本点(白色)。在 4 个控制点,一切看起来都很完美,当我在第 1 个控制点上添加第 5 个时,一切看起来还不错,但是在第 6 个控制点它开始偏离侧面,在第 7 个它跳到原点!
下面我将发布我的代码,其中calculateWeightForPointI
包含实际的算法。供参考-这是我要遵循的信息。如果有人能帮我看看,我会非常感激。
python - pppack 的 Python 包装器?
我在网上广泛搜索以找到pppack的包装器,尤其是例程bsplvb.f和bsplvd.f,它们返回 b 样条及其衍生物的基础。我能找到的唯一与远程相关的东西是这个SE_post。
所以问题是:在 Python 中是否有任何可用于 pppack 的包装器?
我知道scipy.signal.bspline和 scipy.iterpolate。两者都没有我想要的东西,至少我不知道。我基本上是在寻找为给定的一组结生成 b 样条基函数并让我评估它们的代码。
matlab - B样条拟合二维离散数据点(轮廓图像的像素)
我正在尝试将 B 样条拟合到一组有序的离散数据点,这些数据点表示从图像中提取的轮廓的像素。
虽然下面的代码适用于一些简单的形状,但不适用于其他形状(请参见附图中的示例)。为什么会发生这种情况,解决这个问题的更好方法是什么?
我对微分几何很陌生,感谢任何见解或输入。谢谢。
d3.js - 从 D3“基础”曲线上的三个已知点计算控制点的公式
我有一条由D3.js
线生成函数生成的曲线,其中插值设置为“基础”。问题是生成的线只接触到线生成函数中给出的第一个和最后一个点,而不通过中间的点。我知道这些被视为生成b-spline
曲线的控制点,但我正在寻找的是一种“投影”/计算控制点的方法,以便曲线确实通过我的路径数组中的每个点。
我的应用程序中的这些点之间是“句柄”点,用户可以拖动这些点来操纵曲线。如果我将插值设置为“基数”,那么曲线确实会通过每个点,但这不是我想要的曲线类型,我想要“基础”插值产生的更平滑的曲线。
这是我的行生成器代码:
这是一张说明问题的图片。
换句话说,我拥有的三个点是曲线起点和终点的点以及“顶点”处的点(不知道它叫什么......但曲线的“最高”点) . 所以在图中,红点代表顶点,曲线必须经过这个点。
我发现这个问题处理了同样的问题,但使用的是 HTML 5 Canvas 而不是 D3.js。我尝试应用此处给出的公式来计算曲线的控制点,但最终得到以下结果:
“拖动点”(红点)现在位于曲线下方而不是曲线上,并且随着曲线进一步向外拖动,点与曲线之间的距离也会增加。我推测链接到的问题中的公式不起作用的原因是因为 D3 曲线的公式是 a b-spline
,因此与quadraticCurveTo
该问题中提到的曲线不同。(虽然我可能错了......我所知道的数学是危险的!)
D3
所以我的问题是:有人知道“基础”插值生成曲线的公式吗?任何人都可以帮助推导计算曲线控制点的公式,类似于我在链接到的问题中所做的。