public static vecf32 CrossProduct(vecf32 A, vecf32 B) { return(new vecf32 { x = (A.y * B.z) - (A.z * B.y), y = (A.z * B.x) - (A.x * B.z), z = (A.x * B.y) - (A.y * B.x) }); }
public static vecf32 Subtract(vecf32 A, vecf32 B) { return(new vecf32 { x = A.x - B.x, y = A.y - B.y, z = A.z - B.z }); }
public static vecf32 Normalise(vecf32 A) { float a = Length(A); return(new vecf32 { x = A.x / a, y = A.y / a, z = A.z / a }); }
private static void GetTriangleData(short[] verts) { CollisionTri T = new CollisionTri(); T.v1 = ReadVertex(verts[0]); T.v2 = ReadVertex(verts[1]); T.v3 = ReadVertex(verts[2]); vecf32 AB = Subtract(T.v2, T.v1); vecf32 BC = Subtract(T.v3, T.v2); T.u_n = Normalise(CrossProduct(AB, BC)); T.d = PlaneDist(T.u_n, T.v1); }
public static float PlaneDist(vecf32 n, vec16 p) { return(-((n.x * p.x) + (n.y * p.y) + (n.z * p.z))); }
public static float Length(vecf32 A) { return((float)Math.Sqrt((A.x * A.x) + (A.y * A.y) + (A.z * A.z))); }