public static double TriangleAreaAfterTransform( ref Vector3D p1, ref Vector3D p2, ref Vector3D p3, System.Func<Vector3D, Vector3D> transform ) { p1 = transform( p1 ); p2 = transform( p2 ); p3 = transform( p3 ); Vector3D v1 = p1 - p3; Vector3D v2 = p2 - p3; return 0.5 * v1.Cross( v2 ).Abs(); }