/// <summary> /// Calcul le produit d'un vecteur par une matrice 4*4 /// </summary> /// <param name="v"></param> /// <returns>le vecteur résultant de l'opération</returns> public Vec3 productOneVector(Vec3 v) { Vec4 vt = new Vec4(v.X, v.Y, v.Z, 0); return(new Vec3(vt.X * C1.X + vt.Y * C2.X + vt.Z * C3.X + vt.T * C4.X, vt.X * C1.Y + vt.Y * C2.Y + vt.Z * C3.Y + vt.T * C4.Y, vt.X * C1.Z + vt.Y * C2.Z + vt.Z * C3.Z + vt.T * C4.Z )); }
/// <summary> /// Calcul le produit d'un point par une matrice 4*4 /// </summary> /// <param name="p"></param> /// <returns>le vecteur résultant de l'opération</returns> public Point productOnePoint(Point p) { Vec4 vt = new Vec4(p.X, p.Y, p.Z, 1); return(new Point(vt.X * C1.X + vt.Y * C2.X + vt.Z * C3.X + vt.T * C4.X, vt.X * C1.Y + vt.Y * C2.Y + vt.Z * C3.Y + vt.T * C4.Y, vt.X * C1.Z + vt.Y * C2.Z + vt.Z * C3.Z + vt.T * C4.Z )); }
/// <summary> /// Produit matriciel gauche. /// </summary> /// <param name="m">Résultat de l'opération </param> /// <returns></returns> public Mat4 RightMatrixProduct(Mat4 m) { Vec4 vl1, vl2, vl3, vl4; vl1 = new Vec4(C1.X, C2.X, C3.X, C4.X); vl2 = new Vec4(C1.Y, C2.Y, C3.Y, C4.Y); vl3 = new Vec4(C1.Z, C2.Z, C3.Z, C4.Z); vl4 = new Vec4(C1.T, C2.T, C3.T, C4.T); return(new Mat4( new Vec4(vl1.dot(m.C1), vl2.dot(m.C1), vl3.dot(m.C1), vl4.dot(m.C1)), new Vec4(vl1.dot(m.C2), vl2.dot(m.C2), vl3.dot(m.C2), vl4.dot(m.C2)), new Vec4(vl1.dot(m.C3), vl2.dot(m.C3), vl3.dot(m.C3), vl4.dot(m.C3)), new Vec4(vl1.dot(m.C4), vl2.dot(m.C4), vl3.dot(m.C4), vl4.dot(m.C4)) )); }
/// <summary> /// Effectue le produit scalaire entre les 2 vecteurs. /// </summary> /// <param name="v"></param> /// <returns>Résultat du produit scalaire des 2 vecteurs</returns> public double dot(Vec4 v) { return((this.X * v.X) + (this.Y * v.Y) + (this.Z * v.Z) + (this.T * v.T)); }