Good. Here are the calculations (all variables are THREE.Vector3
objects):
// random points A, C and D
A.set( random(-30,30), random(-30,30), random(-30,30) );
C.set( random(-20,20), random(-20,20), random(-20,20) );
D.set( random(-20,20), random(-20,20), random(-20,20) );
// calculate Mid and X
Mid.lerpVectors( C, D, 0.5 );
CD.subVectors( C, D );
X.subVectors( C, A ).cross( CD ).cross( CD ).setLength(-CD.length()/2).add( Mid );