python - 如何在 Python 中翻转两点之间的曲线,并将凸曲线转换为凹曲线?

标签 python python-3.x numpy matplotlib curve-fitting

我有两点说 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()

结果图如图所示: enter image description here

我现在得到的橙色曲线是凸形的。但是,我也想在两点之间得到一条凹曲线。它应该看起来像下面的红色曲线所示。在某种程度上,我想使用蓝线作为镜子来镜像橙色曲线。

什么是合适的方法呢?功能是否可以相应调整?或者有没有办法使用蓝线作为镜像来翻转曲线?谢谢!

enter image description here

最佳答案

这似乎是简单的数学;)

获取 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")

mirror curve

为什么数组需要反转的图形提示

enter image description here

关于python - 如何在 Python 中翻转两点之间的曲线,并将凸曲线转换为凹曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71046036/

相关文章:

algorithm - python(tkinter)中直线和圆之间的碰撞检测

python - 如何使用 PIL 获得日本文本到图像的正确输出?

python - 如何在Python中获取非数值数据的摘要

python - 可以阻止 Genshi 解析 HTML 实体吗?

python - 如何从 url 中的模板传递 pk 以在 View "Django"中使用?

python - 如何在 PyQt4 QTreeWidget 的列单元格内绘制烛台条

python - Pandas 适用于 numpy interp,尺寸问题

Python 用括号分割字符串

python - Perl中相当于$|=1的python是什么

Python - 双线性图像插值