Python 如何在二维空间中求三角形与曲线的交点?

Python 如何在二维空间中求三角形与曲线的交点?,python,matplotlib,Python,Matplotlib,我画了一个三角形和两条线。我想用其他样式绘制三角形内的线条部分。请问如何找到十字路口?非常感谢 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.

我画了一个三角形和两条线。我想用其他样式绘制三角形内的线条部分。请问如何找到十字路口?非常感谢

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], [x_end, 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()

您可以使用
之间填充,并将三角形设置为剪辑路径。需要更改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], [x_end, 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:], y1[10:], y2[10:], facecolor='lime', clip_path=t1, zorder=2)
plt.show()

注:请注意,对于x的第一个值(0),您的公式
y2=a2/(x-c2)
除以零。您可能希望以较大的值开始x,例如
x=np.linspace(0.1100500)

如果不想显示三角形,仍然需要使用ax.add_patch()才能使剪裁按预期工作。您可以使其不可见(
t1=plt.Polygon(三角形[:3,:],color='none')
t1=plt.Polygon(三角形[:3,:],visible=False)

如@swatchai所述,如果您只需要不同的线样式,可以剪裁打印的曲线:

t1=plt.多边形(三角形[:3,:],可见=False)
ax.添加补丁(t1)
#ax.fill_介于(x[10]、y1[10]、y2[10]、facecolor='lime',clip_path=t1、zorder=2)之间
ax.plot(x[10]、y1[10]、'w:',clip_path=t1)
ax.plot(x[10]、y2[10]、'w:',clip_path=t1)

您可以使用
之间填充,并将三角形设置为剪辑路径。需要更改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], [x_end, 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:], y1[10:], y2[10:], facecolor='lime', clip_path=t1, zorder=2)
plt.show()

注:请注意,对于x的第一个值(0),您的公式
y2=a2/(x-c2)
除以零。您可能希望以较大的值开始x,例如
x=np.linspace(0.1100500)

如果不想显示三角形,仍然需要使用ax.add_patch()才能使剪裁按预期工作。您可以使其不可见(
t1=plt.Polygon(三角形[:3,:],color='none')
t1=plt.Polygon(三角形[:3,:],visible=False)

如@swatchai所述,如果您只需要不同的线样式,可以剪裁打印的曲线:

t1=plt.多边形(三角形[:3,:],可见=False)
ax.添加补丁(t1)
#ax.fill_介于(x[10]、y1[10]、y2[10]、facecolor='lime',clip_path=t1、zorder=2)之间
ax.plot(x[10]、y1[10]、'w:',clip_path=t1)
ax.plot(x[10]、y2[10]、'w:',clip_path=t1)

三角形边的方程是
14y-3x=322
14y+3x=322
,您已经有了直线方程。所以只要解这些就可以得到交点。我用solve添加到代码中。解决方案是[]。为什么?三角形边的方程是
14y-3x=322
14y+3x=322
,你已经有直线方程了。所以只要解这些就可以得到交点。我用solve添加到代码中。解决方案是[]。为什么?OP想用其他样式绘制三角形内部的线条部分。所以我想,还需要一些代码,比如
ax.plot(x[10]、y1[10]、'k--',clip_path=t1)
,以及
ax.plot(x[10]、y2[10]、'r--',clip_path=t1)
。非常感谢OP想要用其他样式绘制三角形内部的线条部分。所以我想,还需要一些代码,比如
ax.plot(x[10]、y1[10]、'k--',clip_path=t1)
,以及
ax.plot(x[10]、y2[10]、'r--',clip_path=t1)
,非常感谢