c#中默认不带库三维向量,需要自己安装第三方库,或者可以手动实现一个简易的三维向量。
public struct Vector3D
{public double X { get; set; }public double Y { get; set; }public double Z { get; set; }public Vector3D(double x, double y, double z){X = x;Y = y;Z = z;}//--- 运算符重载 ---// 向量加法public static Vector3D operator +(Vector3D a, Vector3D b){return new Vector3D(a.X + b.X, a.Y + b.Y, a.Z + b.Z);}// 向量减法public static Vector3D operator -(Vector3D a, Vector3D b){return new Vector3D(a.X - b.X, a.Y - b.Y, a.Z - b.Z);}// 向量标量乘法(向量 * 标量)public static Vector3D operator *(Vector3D v, double scalar){return new Vector3D(v.X * scalar, v.Y * scalar, v.Z * scalar);}// 向量标量乘法(标量 * 向量)public static Vector3D operator *(double scalar, Vector3D v){return v * scalar; // 复用上述实现}// 向量标量除法(向量 / 标量)public static Vector3D operator /(Vector3D v, double scalar){if (Math.Abs(scalar) < double.Epsilon)throw new DivideByZeroException("标量不能为零!");return new Vector3D(v.X / scalar, v.Y / scalar, v.Z / scalar);}//--- 其他方法 ---// 向量点积public static double Dot(Vector3D a, Vector3D b){return a.X * b.X + a.Y * b.Y + a.Z * b.Z;}// 向量叉积public static Vector3D Cross(Vector3D a, Vector3D b){return new Vector3D(a.Y * b.Z - a.Z * b.Y,a.Z * b.X - a.X * b.Z,a.X * b.Y - a.Y * b.X);}// 向量长度public double Length(){return Math.Sqrt(X * X + Y * Y + Z * Z);}// 向量归一化(单位化)public Vector3D Normalize(){double length = Length();if (length < double.Epsilon)throw new InvalidOperationException("零向量无法归一化!");return this / length; // 使用标量除法运算符}// 重写 ToStringpublic override string ToString(){return $"({X:F3}, {Y:F3}, {Z:F3})";}
}