使用类

时间:2016-11-08 07:18:20

标签: python matplotlib

我必须定义一个表示欧几里德平面中一个点的类点(x,y),我用它完成了:

class point():
    def __init__(P,x,y):
        P.x=x
        P.y=y

现在我必须通过创建以下方法来扩展这个类:

  1. 返回一个A点,它是使用A=P.verticalReflect(y)在y的水平线上垂直反射P.
  2. 返回一个点B,它使用B=P.translate(x,y)将点P转换为x方向上的x距离和y方向上的y距离。
  3. 使用P.display(options)使用pyplot显示一个点。我应该能够让用户打印标签,设置字体大小和偏移点。
  4. 将启动创建的类的代码示例为:

    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="--")
    

    我无法确定在课堂上开始定义这些新方法的位置。

1 个答案:

答案 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)

祝你好运!