如何解决如何在2D中找到三角形曲线的交点?
我在两行中画了一个三角形。我想用其他样式绘制三角形内部的线条部分。请问如何找到路口?非常感谢。
import matplotlib.pyplot as plt
import numpy as np
from sympy import *
a1 = 1080
a2 = 350
c1 = -7
c2 = 0
d = 7
x = np.linspace(0,100,500)
y1 = a1/(x-c1)-d
y2 = a2/(x-c2)
fig,ax = plt.subplots()
plt.rcParams["figure.figsize"] = [10,3]
I1 = 23
x_end = 70
plt.xlim(0,x_end)
plt.ylim(0,50)
# Plot curves
plt.plot(x[10:],y1[10:],c = 'red')
plt.plot(x[10:],y2[10:],c = 'blue')
# Plot triangle
shift = 15
triangle = np.array([[0,I1],[x_end,I1+shift],I1-shift]])
plt.scatter(triangle[:,0],triangle[:,1],s = 0,color = 'grey')
t1 = plt.Polygon(triangle[:3,:])
plt.gca().add_patch(t1)
x = symbols('x')
intercept = solve(a1/(x-c1)-d,(322+3*x)/14)
print(intercept)
plt.show()
解决方法
您可以使用fill_between
并将三角形设置为clip_path。需要更改zorder以在三角形顶部显示绿色区域。
import matplotlib.pyplot as plt
import numpy as np
a1 = 1080
a2 = 350
c1 = -7
c2 = 0
d = 7
x = np.linspace(0,100,500)
y1 = a1 / (x - c1) - d
y2 = a2 / (x - c2)
fig,ax = plt.subplots(figsize=(10,3))
I1 = 23
x_end = 70
plt.xlim(0,x_end)
plt.ylim(0,50)
# Plot curves
ax.plot(x[10:],y1[10:],c='red')
ax.plot(x[10:],y2[10:],c='blue')
# Plot triangle
shift = 15
triangle = np.array([[0,I1],[x_end,I1 + shift],I1 - shift]])
ax.scatter(triangle[:,0],triangle[:,1],s=1,color='grey')
t1 = plt.Polygon(triangle[:3,:])
ax.add_patch(t1)
ax.fill_between(x[10:],facecolor='lime',clip_path=t1,zorder=2)
plt.show()
PS:请注意,您的公式y2 = a2 / (x - c2)
被x的第一个值(0)除以零。您可能希望以较大的值开头x,例如x = np.linspace(0.1,500)
。
如果您不想显示三角形,则仍需要ax.add_patch()
才能使剪切按预期进行。您可以使其不可见(t1 = plt.Polygon(triangle[:3,:],color='none')
或t1 = plt.Polygon(triangle[:3,visible=False)
)。
正如@swatchai所评论的那样,如果您只想使用其他线型,则可以裁剪绘制的曲线:
t1 = plt.Polygon(triangle[:3,visible=False)
ax.add_patch(t1)
#ax.fill_between(x[10:],zorder=2)
ax.plot(x[10:],'w:',clip_path=t1)
ax.plot(x[10:],clip_path=t1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。