如何翻转 Python 中两点之间的曲线,并将凸曲线转换为凹曲线?
How can I flip a curved line between two points in Python, and convert convex curve to concave?
我有两点说 p1 = (1,2)
和 p2 = (5,4)
。
我想在 Python 中的这两点之间绘制直线和曲线。为了绘制曲线,我创建了一个名为 draw_curve
的函数,如下所示:
import matplotlib.pyplot as plt
import numpy as np
#Points
p1 = [1, 2]
p2 = [5, 4]
#Function to draw curved line
def draw_curve(p1, p2):
a = (p2[1] - p1[1])/ (np.cosh(p2[0]) - np.cosh(p1[0]))
b = p1[1] - a * np.cosh(p1[0])
x = np.linspace(p1[0], p2[0], 100)
y = a * np.cosh(x) + b
return x, y
然后我使用以下代码绘制两点之间的直线和曲线:
#Markers
plt.plot(p1[0], p1[1], marker = "o", markersize = 10, color = "black", label = "P1")
plt.plot(p2[0], p2[1], marker = "o", markersize = 10, color = "red", label = "P1")
#Straight line
plt.plot((p1[0], p2[0]),
(p1[1], p2[1]),
linewidth = 5,
label = "Straight line")
#Curved line
x, y = draw_curve(p1, p2)
plt.plot(x, y, linewidth = 5, label = "Curved line", color = "orange")
plt.legend()
结果图如图所示:
我现在得到的橙色曲线是凸形的。但是,我也想在两点之间得到一条凹曲线。它应该看起来像下面的红色曲线所示。在某种程度上,我想用蓝线作为镜子来镜像橙色曲线。
怎样做才合适?功能是否可以相应调整?或者有没有办法使用蓝线作为镜像来翻转曲线?谢谢!
这似乎是简单的数学运算 ;)
获取 y 上蓝色和橙色曲线之间的差异,反转它,然后添加到蓝色曲线
blue_y = np.linspace(p1[1], p2[1], 100)
plt.plot(x, blue_y+(blue_y-y)[::-1], linewidth = 5, label = "mirror", color = "red")
为什么数组需要反转的图形提示
我有两点说 p1 = (1,2)
和 p2 = (5,4)
。
我想在 Python 中的这两点之间绘制直线和曲线。为了绘制曲线,我创建了一个名为 draw_curve
的函数,如下所示:
import matplotlib.pyplot as plt
import numpy as np
#Points
p1 = [1, 2]
p2 = [5, 4]
#Function to draw curved line
def draw_curve(p1, p2):
a = (p2[1] - p1[1])/ (np.cosh(p2[0]) - np.cosh(p1[0]))
b = p1[1] - a * np.cosh(p1[0])
x = np.linspace(p1[0], p2[0], 100)
y = a * np.cosh(x) + b
return x, y
然后我使用以下代码绘制两点之间的直线和曲线:
#Markers
plt.plot(p1[0], p1[1], marker = "o", markersize = 10, color = "black", label = "P1")
plt.plot(p2[0], p2[1], marker = "o", markersize = 10, color = "red", label = "P1")
#Straight line
plt.plot((p1[0], p2[0]),
(p1[1], p2[1]),
linewidth = 5,
label = "Straight line")
#Curved line
x, y = draw_curve(p1, p2)
plt.plot(x, y, linewidth = 5, label = "Curved line", color = "orange")
plt.legend()
结果图如图所示:
我现在得到的橙色曲线是凸形的。但是,我也想在两点之间得到一条凹曲线。它应该看起来像下面的红色曲线所示。在某种程度上,我想用蓝线作为镜子来镜像橙色曲线。
怎样做才合适?功能是否可以相应调整?或者有没有办法使用蓝线作为镜像来翻转曲线?谢谢!
这似乎是简单的数学运算 ;)
获取 y 上蓝色和橙色曲线之间的差异,反转它,然后添加到蓝色曲线
blue_y = np.linspace(p1[1], p2[1], 100)
plt.plot(x, blue_y+(blue_y-y)[::-1], linewidth = 5, label = "mirror", color = "red")