我正在编写一个python函数来绘制一个简单的矩形,顶点是参数。好吧,这不能正常工作,我似乎无法找出为什么它到处都是绘图。 编辑: 至于我的进口。所以 sp 是 sympy。至于预期的结果当然是画一个矩形。
%matplotlib inline
import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
import math
def draw_rectangle(P1,P2,P3,P4):
p1, p2, p3, p4 = sp.Point(P1[0], P1[1]), sp.Point(P2[0], P2[1]), sp.Point(P3[0], P3[1]),
sp.Point(P4[0], P4[1])
plt.plot(p1,p2)
plt.plot(p2,p3)
plt.plot(p3,p4)
plt.plot(p4,p1)
P1=[20,30]
P2=[40,30]
P3=[40,60]
P4=[20,60]
draw_rectangle(P1,P2,P3,P4)
答案 0 :(得分:0)
x-y 坐标的传递在您的代码中混淆了。 p1
的形式仍然与 P1
相同,即 x-y 对。但是 matplotlib plt.plot()
需要一个 x 值列表,后跟一个 y 值列表。因此,这种误解 - matplotlib 将 plt.plot(p1,p2)
p1
解释为两个 x 值,将 p2
解释为两个 y 值。因此,我们必须在绘图之前将 x 值和 y 值链接在一起。
import sympy as sp
import matplotlib.pyplot as plt
def draw_rectangle(P1,P2,P3,P4):
p1, p2 = sp.Point(P1[0], P1[1]), sp.Point(P2[0], P2[1])
p3, p4 = sp.Point(P3[0], P3[1]), sp.Point(P4[0], P4[1])
plt.plot(*zip(p1,p2))
plt.plot(*zip(p2,p3))
plt.plot(*zip(p3,p4))
plt.plot(*zip(p4,p1))
#or alternatively
#plt.plot(*zip(p1, p2, p3, p4, p1))
P1=[20,30]
P2=[40,30]
P3=[40,60]
P4=[20,60]
draw_rectangle(P1,P2,P3,P4)
plt.show()
示例输出:
但是,目前尚不清楚您为什么在绘图前将数据转换为 sympy
点。您可以直接使用 P1
, P2
,...,但也许这是我们不知道的其他一些程序部分所必需的。或者您实际上想使用另一个 sympy
函数,而不是 sp.point
,但我不会说流利的 sympy
,因此无法对此发表评论。