# A plane through 3 points

I would like to apply this formula equation-of-a-plane-passing-through-3-points to my javascript code.

I have three points p1, p2, p3

``````  const a1 = p2 - p1;
const b1 = p2 - p1;
const c1 = p2 - p1;
const a2 = p3 - p1;
const b2 = p3 - p1;
const c2 = p3 - p1;

const a = b1 * c2 - b2 * c1;
const b = a2 * c1 - a1 * c2;
const c = a1 * b2 - b1 * a2;

const d = (-a * p1 - b * p1 - c * p1);

console.log(p1);
console.log(p2);
console.log(p3);
console.log(" formula π: " + a + "x +" + b + "y + " + c + "z + " + d + "= 0");
``````

Then I get the plane

``````new THREE.Plane(new THREE.Vector3(a, b, c), d)
``````

It looks nice but…the d value looks bad. As you can see in my attached image the helper of the plane (clipPlanes) used to cut off my object has a gap.

Can you help me to fix it?

Try it with Plane.setFromCoplanarPoints(). Just pass in your three points and let the plane class do the math for you.

2 Likes

Thanks a lot!!! It looks much more simple than my formula!! THANKS!

But I got an error, can you help me to use it correctly?

``````    p1 = [0, h1, l];
p2 = [0, h1, 0 ];
p3 = [w, h2, 0];
let v1 = new THREE.Vector3( p1 );
let v2 = new THREE.Vector3( p2 );
let v3 = new THREE.Vector3( p3 );
let cutPlane = new THREE.Plane();
const pl = cutPlane.setFromCoplanarPoints(v1,v2,v3);
//clipPlanes.push(new THREE.Plane(new THREE.Vector3(a, b, c), d));
console.log(pl)
clipPlanes.push(pl);
``````

Then I apply the plan to cut the object as

``````  materialPlanes = new THREE.MeshLambertMaterial({
color: new THREE.Color().setHSL(0, 0.5, 0.5),
side: THREE.DoubleSide,
clippingPlanes: clipPlanes,
clipIntersection: params.clipIntersection,
});
``````

I got a generic error but in the console the plane looks missing constant

``````Plane {normal: Vector3, constant: NaN}
``````

constant: NaN
normal: Vector3

Thanks again!!

Set it directly:

``````    let v1 = new THREE.Vector3( 0, h1, l );
let v2 = new THREE.Vector3( 0, h1, 0 );
let v3 = new THREE.Vector3( w, h2, 0 );
``````
1 Like

Right!!! Lol!! I’m done!! Thanks!!!

1 Like