编写一个二维点和三维点类。 要求: (1)二维点类有x,y坐标属性,编写计算点到坐标原点距离函数; (2)三维点从二维点派生而来,编写计算点到坐标原点距离函数。
时间: 2024-02-17 08:04:36 浏览: 101
一种基于二维特征点的人脸姿态实时估计方法.pdf
好的,以下是一个简单的实现:
```python
class Point2d:
def __init__(self, x, y):
self.x = x
self.y = y
def distance_to_origin(self):
return ((self.x ** 2) + (self.y ** 2)) ** 0.5
class Point3d(Point2d):
def __init__(self, x, y, z):
super().__init__(x, y)
self.z = z
def distance_to_origin(self):
return ((self.x ** 2) + (self.y ** 2) + (self.z ** 2)) ** 0.5
```
在这个实现中,我们先定义了一个二维点类`Point2d`,它有`x`和`y`坐标属性,并且有一个计算点到坐标原点距离的方法`distance_to_origin`。这个方法使用勾股定理计算点到原点的距离。
接着,我们定义了一个三维点类`Point3d`,它从`Point2d`派生而来。它有一个额外的`z`坐标属性,并且也有一个计算点到坐标原点距离的方法`distance_to_origin`。这个方法同样使用勾股定理计算点到原点的距离,只不过要多考虑一个维度。
在`Point3d`类中,我们使用了`super()`函数调用了父类`Point2d`的构造函数。这样就可以不用重新定义`x`和`y`属性,而是直接在父类中定义,然后在子类中只需要添加`z`属性即可。
使用这个实现的时候,我们可以这样创建一个二维点和一个三维点:
```python
p2d = Point2d(3, 4)
p3d = Point3d(1, 2, 3)
```
然后可以调用`distance_to_origin`方法计算它们到原点的距离:
```python
print(p2d.distance_to_origin()) # 输出5.0
print(p3d.distance_to_origin()) # 输出3.7416573867739413
```
注意,在`Point3d`类中,我们并没有重新定义`distance_to_origin`方法,而是直接继承了父类的实现。这是因为二维点和三维点计算距离的方式是一样的,只不过多了一个维度。因此,我们可以直接继承父类的实现,而不需要重新定义。
阅读全文