Vector CaculateTriangleNormal(Point3d& p0, Point3d& p1, Point3d& p2) { Vector Normal; float v1x = p1.X - p0.X; float v1y = p1.Y - p0.Y; float v1z = p1.Z - p0.Z; float v2x = p2.X - p1.X; float v2y = p2.Y - p1.Y; float v2z = p2.Z - p1.Z; Normal.X= v1y * v2z - v1z * v2y; Normal.Y = v1z * v2x - v1x * v2z; Normal.Z = v1x * v2y - v1y * v2x; float len = (float)sqrt(Normal.X * Normal.X + Normal.Y * Normal.Y + Normal.Z * Normal.Z); if (len == 0) { //throw Exception(); } else { Normal.X /= len; Normal.Y /= len; Normal.Z /= len; } return Normal; }