/// <summary> /// Construct a plane from 3 coplanar points. /// </summary> /// <param name="point0">First point.</param> /// <param name="point1">Second point.</param> /// <param name="point2">Third point.</param> public void Redefine(Vector3F point0, Vector3F point1, Vector3F point2) { var edge1 = point1 - point0; var edge2 = point2 - point0; Vector3F.Cross(edge1, edge2, ref Normal); Normal.Normalize(); D = -Normal.Dot(point0); }
public static void CalculateBasicFaceNormal(Vector3F v1, Vector3F v2, Vector3F v3, ref Vector3F result) { TempLeft.CopyFrom(v2); TempRight.CopyFrom(v3); TempLeft.Subtract(v1); TempRight.Subtract(v1); Vector3F.Cross(TempLeft, TempRight, ref result); result.Normalize(); }
/// <summary> /// Devuelve el ángulo (en grados) entre v1 y v2. /// <para>Ambos vectores se normalizan y quedan modificados.</para> /// <para>Si uno de los vectores o los dos valen cero, devuelve 90º.</para> /// <para>El ángulo devuelto varia entre 0 y 180 grados</para> /// </summary> /// <param name="v1"></param> /// <param name="v2"></param> /// <returns></returns> public static double Angle(Vector3F v1, Vector3F v2) { v1.Normalize(); v2.Normalize(); var rdot = v1.Dot(v2); var result = Math.Acos(rdot); return(MathHelp.DegreesFromRadians((float)result)); }
/// <summary> /// Construct a plane from 3 coplanar points. /// </summary> /// <param name="point0">First point.</param> /// <param name="point1">Second point.</param> /// <param name="point2">Third point.</param> public Plane(Vector3F point0, Vector3F point1, Vector3F point2) { Normal = new Vector3F(); var edge1 = point1 - point0; var edge2 = point2 - point0; Vector3F.Cross(edge1, edge2, ref Normal); Normal.Normalize(); D = -Normal.Dot(point0); }
/// <summary> /// Calculate a face normal, no w-information. /// </summary> /// <param name="v1"></param> /// <param name="v2"></param> /// <param name="v3"></param> /// <returns></returns> public static Vector3F CalculateBasicFaceNormal(Vector3F v1, Vector3F v2, Vector3F v3) { var normal = new Vector3F(); var left = v2 - v1; var right = v3 - v1; Vector3F.Cross(left, right, ref normal); normal.Normalize(); return(normal); }