【发布时间】:2020-11-17 19:50:11
【问题描述】:
我想用 Python 在 JupyterLab 上绘制贝塞尔曲线,我正在使用 MatplotLib 来制作兰博基尼的复制品。绘图必须是忠实的复制品,所以我使用 NumPy 将Lamborghini 图像作为背景,只要我可以在它上面绘制并操纵它的属性,例如不透明度。但无论我做什么,这些笨蛋的第一点都会发疯。我尝试使用 Path.CURVE3 和 Path.CURVE4、Path.STOP 以及 Path.LINETO 以使 Bézier 曲线在给定点 (curve going crazy) 上正确停止。我也尝试制作更小的曲线,但我无法看到我想要的。我必须准确地跟随汽车的曲线。我使用 GIMP 来提取我需要的点。
这是我的代码,实际上,这种情况比我在这里公开的更常见,它也发生在没有 NumPy 图像处理的情况下。使用 CURVE 对象的规则是什么?有什么限制?是什么让我的曲线变得异常疯狂?
import math
import matplotlib.patches as mpatches
import matplotlib.path as mpath
import matplotlib.pyplot as plt
import numpy as np
Path = mpath.Path
fig, ax = plt.subplots()
bumper = mpatches.PathPatch(
Path(
[(22, 163), (12, 134), (13, 132), (30.6, 117.65), (43, 118)],
[Path.MOVETO, Path.CURVE4, Path.CURVE4, Path.CURVE4, Path.CURVE4],
),
fc="none",
transform=ax.transData,
color="green",
lw=1,
)
ax.add_patch(bumper)
ax.set_title("Lamborghini Sián FKP 37", fontfamily="Tahoma", fontsize=22)
ax.set_aspect(1)
plt.xticks(np.linspace(0, 1180, 21), fontsize=10)
plt.yticks(np.linspace(0, 330, 9), fontsize=10)
plt.grid(color="gray", ls=":", lw=0.2)
lambo = plt.imread("Lamborghini Sian FKP 37 Right Side.png")
plt.imshow(lambo, alpha=0.35, extent=[0, 1180, 0, 330])
plt.rcParams["figure.figsize"] = (15, 6)
plt.show()
【问题讨论】:
标签: python numpy matplotlib jupyter-lab bezier