创建一个Vector类,既可表示一个三维向量,也可表示三维空间的点。它具有以下成员: (1)double类型属性X, Y, Z,代表向量三个维度上的分量; (2)double类型常量epsilon,值为0.00001; (3)静态Vector字段zero,代表原点; (4)无参、两参和三参构造函数。无参、两参构造函数调用三参构造函数。未提供的分量赋值为0; (5)double类型只读属性Magnitude,可读取向量的模,即该向量的长度; (6)Vector类型只读属性Normalized,可读取归一化后的向量,即向量方向不变,模变为1;如果自身的模小于epsilon,返回zero。 (7)double类型方法DistanceTo(Vector other),将向量当做三维点,计算与另一个点的距离; (8)Vector类型方法MoveTowards(Vector target, double distance),将本向量当做三维点,沿本点与target点的连线方向,移动distance距离,获得一个新的三维点,并返回; (9)重写ToString()方法,输出形式如"(1.2, 2.4, 3.6)"; (10)在Main方法中构造一些向量,测试5、6、7、8、9获得的属性或函数。 提交上述程序与运行截图。 class Program { static void Main(string[] args) { Vector v1 = new Vector(5, 2); Vector v2 = new Vector(2, 2, 2); WriteLine(v1.Magnitude); WriteLine(v2.Normalized); WriteLine(v1.DistanceTo(v2)); WriteLine(v1.MoveTowards(v2, 2)); } } class Vector { public const double epsilon = 0.00001; private double x, y, z; public static Vector left = new Vector(-1, 0, 0); public static Vector right = new Vector(0, 0, 1); public static Vector zero = new Vector(); public double X { get => x; set => x = value; } public double Y { get => y; set => y = value; } public double Z { get => z; set => z = value; } public Vector(double x, double y, double z) => (this.x, this.y, this.z) = (x, y, z); public Vector(double x, double y) : this(x, y, 0) { } public Vector() : this(0, 0, 0) { } public double Magnitude { get => Math.Sqrt(x * x + y * y + z * z); } public Vector Normalized { get { double mag = Magnitude; if (mag > epsilon) return new Vector(x/mag, y/mag, z/mag) ; else return zero; } } public double DistanceTo(Vector v) { double diff_x = x - v.x; double diff_y = y - v.y; double diff_z = z - v.z; return (float)Math.Sqrt(diff_x * diff_x + diff_y * diff_y + diff_z * diff_z); } public Vector MoveTowards(Vector target, double distance) { Vector direction = new Vector(target.X - x, target.Y - y, target.Z - z); double mag = direction.Magnitude; if (mag < epsilon) return target; return new Vector(x + direction.x * distance / mag, y + direction.y * distance / mag, z + direction.z * distance / mag); } public override string ToString() => $"({x}, {y}, {z})"; }