gpt4 book ai didi

python - 如何使用 Python 中的 numpy 和 matplotlib 在 Python 中的曲线内部绘制切线圆?

转载 作者:行者123 更新时间:2023-12-01 22:54:52 25 4
gpt4 key购买 nike

我想在 Python 中绘制与曲线内部相切的圆,如下所示: enter image description here

我尝试了以下方法。我创建了一条倒指数曲线以获得如下所示的曲线。

x = np.arange(0, 2, 0.1)
y = [1/np.exp(i) for i in x]
plt.plot(x, y, marker = "o")

enter image description here

要添加一个圆作为曲线的切线,我手动添加一个圆,如下所示:

fig, ax = plt.subplots()

#Plot exponential curve
ax.plot(x, y)

#Add tangential circle manually
pi = np.pi
c1 = plt.Circle((x[1]+ np.sin(pi/4) * 0.1, y[1] + np.sin(pi/4) * 0.1),
radius = 0.1, facecolor = "black", ec = "white")
ax.add_patch(c1)

enter image description here

这里我的假设是下图中阴影部分所表示的角度(法线半径与水平x轴之间的夹角为45度)。

enter image description here

但是,我认为这是一个不正确的假设和不正确的做法。当我添加更多圆圈时,它们并不完全与曲线相切,如下所示。

enter image description here

将圆绘制为曲线的切线的正确方法是什么?可以用 Python 实现吗?

最佳答案

使用三角函数(可能有一种方法可以简化,但我生锈了+累了:p)。

fig, ax = plt.subplots()

X = np.arange(0, 5, 0.1)
Y = np.sin(X)

#Plot exponential curve
ax.plot(X, Y)
ax.set_aspect('equal')

#Add tangential circles
for i in np.arange(1,len(X),5):
ax.plot(X[i], Y[i], marker='o', color='r')
pi = np.pi
radius = 0.3
# slope of tangent
dydx = np.gradient(Y)[i]/np.gradient(X)[i]
# slope of perpendicular
slope = 1/abs(dydx)
# angle to horizontal
angle = np.arctan(slope)
c1 = plt.Circle((X[i] - np.sign(dydx)*np.cos(angle) * radius,
Y[i] + np.sin(angle) * radius),
radius = radius, facecolor = "black", ec = "white")
ax.add_patch(c1)

输出:

enter image description here

关于python - 如何使用 Python 中的 numpy 和 matplotlib 在 Python 中的曲线内部绘制切线圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73521144/

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