gpt4 book ai didi

math - 给定 f(x) 线性函数,如何获得二次贝塞尔控制点

转载 作者:行者123 更新时间:2023-12-05 00:29:25 26 4
gpt4 key购买 nike

我一直在对该主题进行大量研究,并发现了一些有用的帖子,但我无法做到这一点。

我正在开发一个非常简单的结构分析应用程序。在这个应用程序中,我需要显示一个图表,显示梁的内部应力。该图由以下公式获得:

y = (100 * X / 2) * (L - X)

哪里 L是梁的已知长度(为了简单起见,可以说它是 1)。和 X是介于 0 和梁的长度之间的值。所以最终的公式是:
y = (100 * X / 2) * (1 - x) where  0 < X < 1.

假设我的起点和终点是 P0 = (0,0)P2 = (1,0) .我如何获得 P2 (控制点)??我一直在维基百科页面中搜索,但我不确定如何从二次贝塞尔曲线公式中获取控制点:
B(t) = (1 - t)^2 * P0 + 2*(1 - t)*t * P1 + t^2 * P2

我敢肯定这一定是一个很容易解决的问题……有人可以帮我吗?

P.S.:我也发现了这个, How to find the mathematical function defining a bezier curve ,这似乎解释了如何做与我想要实现的相反的事情。我只是不知道如何扭转它。

最佳答案

我们想要由 y 定义的二次曲线匹配二次贝塞尔曲线
B(t) 定义.

在必须匹配的许多点中,出现在 x =
0.5
处的峰值。 .当x = 0.5 ,

y = (100 * x / 2) * (1 - x)

100 1 25
y = ---- * --- = ---- = 12.5
4 2 2

因此,让我们安排 B(0.5) = (0.5, 12.5) :
B(t) = (1-t)^2*(0,0) + 2*(1-t)*t*(Px, Py) + t^2*(1,0)
(0.5, 12.5) = B(0.5) = (0,0) + 2*(0.5)*(0.5)*(Px, Py) + (0.25)*(1,0)

0.5 = 0.5 * Px + 0.25
12.5 = 0.5 * Py

求解 PxPy ,我们得到
(Px, Py) = (0.5, 25)

这是我们找到正确点的视觉确认(在 Python 中):
# test.py
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 1, 100)
y = (100*x/2)*(1-x)
t = np.linspace(0, 1, 100)
P0 = np.array([0,0])
P1 = np.array([0.5,25])
P2 = np.array([1,0])
B = ((1-t)**2)[:,np.newaxis]*P0 + 2*((1-t)*t)[:,np.newaxis]*P1 + (t**2)[:,np.newaxis]*P2
plt.plot(x, y)
plt.plot(B[:,0], B[:,1])
plt.show()

运行 python test.py ,我们看到两条曲线重叠:

enter image description here

我怎么知道选择 t = 0.5作为 B(t) 时的参数值达到最大高度?

嗯,它主要基于直觉,但这里有一个更正式的方法来证明它:
B'(t) 的 y 分量当 B(t) 时等于 0达到其最大高度。所以,取 B(t) 的导数, 我们看
0 = 2*(1-2t)*Py
t = 0.5 or Py = 0

如果 Py = 0,则 B(t) 是从 (0,0) 到 (1,0) 的水平线。拒绝这个退化案例,我们看到 B(t)t = 0.5 达到最大高度时.

关于math - 给定 f(x) 线性函数,如何获得二次贝塞尔控制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com