docs: @Pure
  	public static boolean intersectsCoplanarTriangleTriangle(
  			double v1x, double v1y, double v1z,
  			double v2x, double v2y, double v2z,
  			double v3x, double v3y, double v3z,
  			double u1x, double u1y, double u1z, 
  			double u2x, double u2y, double u2z,
  			double u3x, double u3y, double u3z) {
  
  		int i0, i1;
  
  		// first project onto an axis-aligned plane, that maximizes the area
  		// of the triangles, compute indices: i0,i1.
  		{
  			double nx = v1y * (v2z - v3z) + v2y * (v3z - v1z) + v3y * (v1z - v2z);
  			double ny = v1z * (v2x - v3x) + v2z * (v3x - v1x) + v3z * (v1x - v2x);
  			double nz = v1x * (v2y - v3y) + v2x * (v3y - v1y) + v3x * (v1y - v2y);
  
  			nx = (nx<0) ? -nx : nx;
  			ny = (ny<0) ? -ny : ny;
  			nz = (nz<0) ? -nz : nz;
  
  			if(nx>ny) {
  				if(nx>nz) {
  					// nx is greatest
  					i0 = 1;
  					i1 = 2;
  				}
  				else {
  					// nz is greatest
  					i0 = 0;
  					i1 = 1;
  				}
  			}
  			else {   /* nx<=ny */
  				if(nz>ny) {
  					// nz is greatest
  					i0 = 0;
  					i1 = 1;                                           
  				}
  				else {
  					// ny is greatest
  					i0 = 0;
  					i1 = 2;
  				}
  			}
  		}
  
  		double[] tv1 = new double[] {v1x,v1y,v1z};
  		double[] tv2 = new double[] {v2x,v2y,v2z};
  		double[] tv3 = new double[] {v3x,v3y,v3z};
  		double[] tu1 = new double[] {u1x,u1y,u1z};
  		double[] tu2 = new double[] {u2x,u2y,u2z};
  		double[] tu3 = new double[] {u3x,u3y,u3z};
  
  		// test all edges of triangle 1 against the edges of triangle 2
  		if (intersectsCoplanarTriangle(i0,i1,0,tv1,tv2,tu1,tu2,tu3)) return true;
  		if (intersectsCoplanarTriangle(i0,i1,0,tv2,tv3,tu1,tu2,tu3)) return true;
  		if (intersectsCoplanarTriangle(i0,i1,0,tv3,tv1,tu1,tu2,tu3)) return true;
  
  		// finally, test if tri1 is totally contained in tri2 or vice versa
  		if (AbstractTriangle3F.containsTrianglePoint(i0,i1,tv1,tu1,tu2,tu3)) return true;
  		if (AbstractTriangle3F.containsTrianglePoint(i0,i1,tu1,tv1,tv2,tv3)) return true;
  
  		return false;
  	}