// Норма вектора public TVector GetNorm() { TVector Result = new TVector(GetLength()); for (int i = 0; i < GetLength(); i++) { Result[i] = this[i] / Abs(); } return(Result); }
// Умножение на число public TVector Mult(double a) { double[] result = new double[Vector.Length]; for (int i = 0; i < Vector.Length; i++) { result[i] = a * Vector[i]; } TVector ResultVector = new TVector(result); return(ResultVector); }
// Скалярное произведение public double MultScalar(TVector Vector2) { double result = 0; if (Vector.Length == Vector2.Vector.Length) { for (int i = 0; i < Vector.Length; i++) { result = result + Vector[i] * Vector2.Vector[i]; } } return(result); }
// Умножение на вектор (Векторное произв.) public TVector Mult(TVector Vector2) { double[] result = new double[Vector.Length]; if (Vector.Length == 3 & Vector2.Vector.Length == 3) { result[0] = Vector[1] * Vector2.Vector[2] - Vector[2] * Vector2.Vector[1]; result[1] = Vector[2] * Vector2.Vector[0] - Vector[0] * Vector2.Vector[2]; result[2] = Vector[0] * Vector2.Vector[1] - Vector[1] * Vector2.Vector[0]; } TVector ResultVector = new TVector(result); return(ResultVector); }
// Поворот с помощью кватерниона public TVector RotateByQuaternion(TQuaternion Q) { TVector Result = new TVector(Vector); TQuaternion ResultQ; TQuaternion vector = new TQuaternion(0, this); ResultQ = Q.Mult(vector); ResultQ = ResultQ.Mult(Q.Conjugate()); for (int i = 1; i < 4; i++) { Result.Vector[i - 1] = ResultQ.Vec[i]; } return(Result); }
// Сумма векторов public TVector Sum(TVector Vector2) { TVector ResultVector; double[] result = new double[Vector.Length]; if (result.Length == Vector2.GetLength()) { for (int i = 0; i < result.Length; i++) { result[i] = Vector[i] + Vector2.Vector[i]; } } ResultVector = new TVector(result); return(ResultVector); }
// Поворот на угол вокруг оси (через кватернионы) public TVector RotateByAngleOnAxis(double phi, TVector V) { TQuaternion Q = new TQuaternion(phi, V); Q = Q.Normalization(); TQuaternion ThisVecQ = new TQuaternion(0, Vector[0], Vector[1], Vector[2]); TQuaternion ResultQ = Q.Mult(ThisVecQ); ResultQ = ResultQ.Mult(Q.Conjugate()); TVector Result = new TVector(Vector); for (int i = 1; i < 4; i++) { Result.Vector[i - 1] = ResultQ.Vec[i]; } return(Result); }
// Умножение на вектор public TVector Mult(TVector B) { TVector ResultVector; double[] result = new double[B.Vector.GetLength(0)]; if (matrix.GetLength(0) == B.Vector.GetLength(0)) { for (int i = 0; i < matrix.GetLength(0); i++) { for (int k = 0; k < matrix.GetLength(0); k++) { result[i] = result[i] + matrix[i, k] * B.Vector[k]; } } } ResultVector = new TVector(result); return(ResultVector); }
// Дальше перегрузка операторов public static TVector operator *(TMatrix a, TVector b) { TVector Result = a.Mult(b); return(Result); }