姓名:卜凡
学号:2020211066
指导老师:符强
日期:2022-06-30
本项目是一个打靶游戏,实现的功能和模块如下:

本报告划分出的各模块与代码模块相互照应,顺序一致。
下面是目录。
本项目并没有使用 Numpy 库提供矩阵运算,而是自己实现了表示点或向量的 Point 类和表示 $3 \times 3$  矩阵的 Matrix3x3 类。
表示三维坐标中的坐标点或向量的 Point 类,主要由 x 、 y 、 z 三个坐标构成。在代码中已经实现完成,下面是方法列表。

注1:这里的 Number 包括了整数或浮点数。
注2:标记有 [*] 的方法都是在具有可变参数的构造函数 __init__ 中判断参数类型而进行手动重载,如下部分代码:
# 表示三维坐标中的点或者向量。
class Point(object):
		def __init__(self, *args):
        # [0 参数] 默认构造方法:x 与 y 默认值均为 0
        if (len(args) == 0):
            self.x = self.y = self.z = 0.0
        # [1 参数] 复制构造方法
        elif (len(args) == 1 and isinstance(args[0], Point)):
            other = args[0];
            self.x = other.x
            self.y = other.y
            self.z = other.z
        # [1 参数] 构造方法,三参数均为同一值
        elif (len(args) == 1 and isinstance(args[0], (int, float))):
            value = args[0]
            self.x = self.y = self.z = value
        # [3 参数] 构造方法
        elif (len(args) == 3 and isinstance(args[0], (int, float))
                             and isinstance(args[1], (int, float))
                             and isinstance(args[2], (int, float))):
            self.x = args[0]
            self.y = args[1]
            self.z = args[2]
        # [其他参数] 抛出异常,表示参数不合法。
        else:
            raise ValueError("invalid args", args)
注3:表中带有运算符表示的方法均重载了运算符(运算符大全可参考附录中资料 [1]),如下:
# 定义 / 运算符:求两 Point 之间距离
    def __truediv__(self, other) -> float:
        return math.sqrt((self.x - other.x) ** 2
                         + (self.y - other.y) ** 2
                         + (self.z - other.z) ** 2)
顺便定义了帮助函数 averagePoints(List[Point]) -> Point,以求得由点构成的数组的平均点,在 2.3 节中会再次提到。
在代码中已经实现完成。该矩阵类仅用于在碰撞时进行一些坐标系变换,因而并没有实现得非常全面,只是实现了下面这些与坐标系变换相关的必要方法。