我必须定义一个表示欧几里德平面中一个点的类点(x,y),我用它完成了:
class point():
def __init__(P,x,y):
P.x=x
P.y=y
现在我必须通过创建以下方法来扩展这个类:
A=P.verticalReflect(y)
在y的水平线上垂直反射P. B=P.translate(x,y)
将点P转换为x方向上的x距离和y方向上的y距离。P.display(options)
使用pyplot显示一个点。我应该能够让用户打印标签,设置字体大小和偏移点。将启动创建的类的代码示例为:
P=point(2,3)
P.display(label="P",labeloffset=0.2)
A=P.verticalReflect(y=3.5)
A.display(c="green",label="A",labeloffset=0.1)
plt.axhline(y=3.5,c="k",ls="--")
我无法确定在课堂上开始定义这些新方法的位置。
答案 0 :(得分:0)
您应该在类范围内定义这些方法,而不是在哪里以及以何种顺序非常重要。以下是一个简单的例子:
import matplotlib.pyplot as plt
class Point:
def __init__(self,x,y):
self.x = x
self.y = y
def verticalReflect(self,y):
# your code. an example would be
dy = y - self.y
self.y += 2*dy
return Point(self.x,self.y)
def translate(self,x,y):
self.x += x
self.y += y
return Point(self.x,self.y)
def display(self,<options_here>):
# your code. an example would be
plt.plot(self.x,self.y,'o',<handle_options>)
#plt.show()
plt.hold(True)
plt.axis([-10,10,-10,10])
p = Point(2,2)
p.display()
p.translate(3,-1)
p.display()
p.verticalReflect(3)
p.display()
p.verticalReflect(2)
p.display()
plt.show()
如果省略<options_here>
和<handle_options>
部分,则会有一个如何操作的实例。请注意,如果您取消注释display()
,则可以在plt.show()
方法中立即绘制并显示积分。
我这样设置,你首先调用plt.hold(True)
并首先在画布上绘制所有点,然后只在最后一行代码中显示所有点。
我还在您的代码中添加了return Point(self.x,self.y)
,因此您可以创建新点而不是更改现有点。如果您想保持起始点不变,则应将self.x|y += ...
更改为x|y += ...
并返回return Point(x,y)
。
祝你好运!