从贝塞尔曲线沿线的点导出贝塞尔曲线控制点的算法?

2023-12-21

我一直在寻找,但显然没有找到一种算法,该算法允许我插入已知沿曲线的 x,y 坐标列表,以便获得三次贝塞尔曲线吐口的 4 个控制点出去。

更准确地说,我正在寻找一种算法,它可以为我提供塑造曲线所需的两个控制点,同时输入一系列离散点,包括确定曲线起点和终点的两个控制点。

Thanks!

编辑:好的,由于数学,一个老对手,我需要询问最适合多项式函数的贝塞尔曲线。


所以我假设端点是固定的,然后你有许多 (x,y) 样本点,你想用三次贝塞尔曲线来拟合它们。

您拥有的样本点的数量将决定采取什么方法。我们来看几个案例:

2 points

2个样本点是最简单的情况。如果算上终点的话,总共可以得到 4 分。这是三次贝塞尔曲线中 CV 的数量。为了解决这个问题,您需要两个样本点的参数 (t) 值。然后,您有一个由 2 个方程和 2 个点组成的系统,您需要求解,其中方程是贝塞尔曲线在您选择的 t 值处的参数方程。

t 值可以是您喜欢的任何值,但通过使用 1/3 和 2/3,或者查看相对距离或沿基线的相对距离,您将获得更好的结果,具体取决于您的数据。

1 point

这与 2 点类似,只不过您没有足够的信息来唯一确定您的所有自由度。我建议是拟合二次贝塞尔曲线,然后进行度数提升。我写了一个二次拟合的详细例子这个问题 https://stackoverflow.com/questions/18476308/non-parametric-quadratic-bezier-curve-through-3-points-in-2d-in-r/18485522#18485522.

超过2分

在这种情况下,没有唯一的解决方案。我使用最小二乘近似得到了很好的结果。步骤是:

  • 为每个样本选取 t 值
  • 将方程组构建为矩阵
  • 可选择添加整流罩或其他平滑功能
  • 使用最小二乘求解器求解矩阵

这里有对这些步骤的很好的描述免费 cadd 教科书 http://tom.cs.byu.edu/~557/text/cagd.pdf,第 11 章。它讨论了拟合 B 样条曲线,但三次贝塞尔曲线是 B 样条曲线的一种(节点向量为 0,0,0,1,1,1,有 4 个点)。

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

从贝塞尔曲线沿线的点导出贝塞尔曲线控制点的算法? 的相关文章

  • 如何计算列表的最小不公平性总和

    我试图将问题陈述总结如下 Given n k和一个数组 列表 arr where n len arr and k is an integer in set 1 n inclusive 对于数组 或列表 myList 不公平总和定义为sum中
  • 如何计算python 2D散点占用面积

    我使用 matplotlib 绘制了这两个 2000 个点的序列 从图片上看 前2000点占用的面积比后2000点要小 但如果我想定量计算2000个点的第一序列和第二序列占用了多少面积 该怎么办 我真的很感谢任何帮助 建议或意见 非常感谢
  • 一种递归算法,用于在数组中查找总和为给定整数的两个整数

    我需要一个算法来确定数组是否包含两个总和为给定整数的元素 数组已排序 该算法应该是递归的并且运行时间为 O n 递归步骤应该基于总和 这意味着该方法传递总和并根据最终结果返回 true 或 false 如果找到两个元素 返回 true 否则
  • 什么是确定性快速排序?

    我一直在阅读有关快速排序的内容 发现有时它被称为 确定性快速排序 这是普通快速排序的替代版本吗 普通快速排序和确定性快速排序有什么区别 普通 确定性 快速排序在特定数据集上的行为可能非常差 例如 选择第一个未排序元素的实现在已排序数据上的时
  • 找到质数?

    为了判断 N 是否是质数 我们只需要查找所有小于或等于 sqrt N 的数字 这是为什么 我正在编写 C 代码 因此试图理解其背后的原因 如果 N 是一个正整数 且能被两个正整数 1 和 N 整除 则 N 是素数 由于数字的约数不能大于该数
  • 将整数列表划分为总和相等的 K 个子列表

    类似的问题还有1 https stackoverflow com questions 27322804 partition of a set into k disjoint subsets with equal sum and 2 http
  • 计算具有 3 个循环的算法的复杂度

    我尝试解决以下练习 以下代码片段最坏情况运行时间的增长顺序是什么 作为 N 的函数 int sum 0 for int i 1 i lt N i for int j 1 j lt i i j for int k 1 k lt j j k s
  • 运行时间为 O(n) 且就地排序的排序算法

    有没有运行时间为O n 并且还分类到位 在某些情况下 最好的情况是 O n 但这可能是因为项目集合已经排序 你正在看 O nlogn 一些较好的平均值 话虽如此 排序算法的 Wiki 还是相当不错的 有一个表格比较了流行的算法 说明了它们的
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • 给定 X 在三次贝塞尔曲线上求 Y?

    我需要一种方法 允许我在给定 x 坐标的情况下找到三次贝塞尔曲线上的 Y 坐标 我遇到过很多地方告诉我将其视为三次函数 然后尝试找到根 我理解这一点 然而 三次贝塞尔曲线的方程是 对于 x 坐标 X t 1 t 3 X0 3 1 t 2 t
  • 序列和与 GCD

    大约一个月前 我在编程挑战中遇到了这个问题 但社论尚未发布 所以我在这里问 有一个大小为 N 的数组 A 求 A 的 K 个长度子序列的总和 GCD Example 如果 A 1 2 3 且 K 2 1 2 3 总和 1 GCD 3 1 3
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • LRU算法,实现这个算法需要多少位?

    我有一个关于 LRU 算法的小问题 如果您有一个包含四个块的高速缓存 那么需要多少位来实现该算法 假设您指的是 4 路组关联缓存 完美 LRU 本质上是按照使用顺序为每一行分配一个精确的索引 您也可以将其视为 年龄 因此 4 个元素中的每一
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可

随机推荐