c++ - 在三次贝塞尔曲线上找到给定 X 的 Y?

标签 c++ bezier curve cubic

我需要一种方法,在给定 x 坐标的情况下,我可以在三次贝塞尔曲线上找到 Y 坐标。

我遇到很多地方告诉我将其视为三次函数,然后尝试找到根,我理解。然而,三次贝塞尔曲线的方程是(对于 x 坐标):

X(t) = (1-t)^3 * X0 + 3*(1-t)^2 * t * X1 + 3*(1-t) * t^2 * X2 + t ^3 * X3

让我感到困惑的是 (1-t) 值的添加。例如,如果我用一些随机数填充 X 值:

400 = (1-t)^3 * 100 + 3*(1-t)^2 * t * 600 + 3*(1-t) * t^2 * 800 + t^3 * 800

然后重新排列:

800t^3 + 3*(1-t)*800t^2 + 3*(1-t)^2*600t + (1-t)^3*100 -400 = 0

我仍然不知道 (1-t) 系数的值。当 (1-t) 仍然未知时,我应该如何解方程?

最佳答案

三次贝塞尔曲线有三种常用的表达方式。

第一个 x 作为 t 的函数

x(t) = sum( f_i(t) x_i )
     = (1-t)^3 * x0 + 3*(1-t)^2 * t * x1 + 3*(1-t) * t^2 * x2 + t^3 * x3

其次,y 是 x 的函数

y(x) = sum( f_i(x) a_i )
     = (1-x)^3 * y0 + 3*(1-x)^2 * x * y1 + 3*(1-x) * x^2 * y2 + x^3 * y3

前两个在数学上是相同的,只是对变量使用了不同的名称。

根据您的描述“在三次贝塞尔曲线上找到 Y 坐标,并在其上给出 x 坐标。”我猜你有一个使用第二个方程的问题正在尝试重新排列第一个方程来帮助你解决它,而你应该使用第二个方程。如果是这种情况,则无需重新排列或求解 - 只需插入 x 值即可获得解决方案。

你可能有第三种情况的方程,这是丑陋和困难的情况。 这是 x 和 y 参数都是第三个变量 t 的三次贝塞尔曲线。

x(t) = sum( f_i(t) x_i )
y(t) = sum( f_i(t) y_i )

如果这是你的情况。告诉我,我可以详细说明您需要做些什么来解决它。

关于c++ - 在三次贝塞尔曲线上找到给定 X 的 Y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302937/

相关文章:

c++ - "name::name"在 C++ 中意味着什么?

curve-fitting - 具有已知端点的贝塞尔曲线拟合

apache-flex - 如何一次从3个给定点绘制连续曲线

javascript - 使用按钮 jquery 弯曲文本

圆形笔划上的 svg 多种颜色

python - 在贝塞尔曲线的开始/结束处强制法向加速度为零

c++ - 为什么通过GLFW进行的这个简单的OpenGL程序在Intel HD P4600上不起作用?

c++ - OpenGL 渲染与原始图像颜色不同的纹理?

vector - 高效的线条平滑和/或简化

c++ - 如何在 C++ 中遍历类的公共(public)变量?