Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check which side of a plane points are on

Tags:

I'm trying to take an array of 3D points and a plane and divide the points up into 2 arrays based on which side of the plane they are on. Before I get to heavily into debugging I wanted to post what I'm planning on doing to make sure my understanding of how to do this will work.

Basically I have the plane with 3 points and I use (pseudo code):

var v1 = new vector(plane.b.x-plane.a.x, plane.b.y-plane.a.y, plane.b.z-plane.a.z); var v2 = new vector(plane.c.x-plane.a.x, plane.c.y-plane.a.y, plane.c.z-plane.a.z); 

I take the cross product of these two vectors to get the normal vector.

Then I loop through my array of points and turn them into vectors and calculate the dot product against the normal.

Then i use the dot product to determine the side that the point is on.

Does this sound like it would work?

like image 430
GameDever Avatar asked Mar 28 '13 17:03

GameDever


Video Answer


2 Answers

Let a*x+b*y+c*z+d=0 be the equation determining your plane.

Substitute the [x,y,z] coordinates of a point into the left hand side of the equation (I mean the a*x+b*y+c*z+d) and look at the sign of the result.

The points having the same sign are on the same side of the plane.

Honestly, I did not examine the details of what you wrote. I guess you agree that what I propose is simpler.

like image 182
Ali Avatar answered Sep 18 '22 23:09

Ali


Your approach sounds good. However, when you say "and turn them into vectors", it might not be good (depending on the meaning of your sentence).

You should "turn your points into vector" by computing the difference in terms of coordinates between the current point and one of the points in the plane (for example, one of the 3 points defining the plane). As you wrote it, it sounds like you might have misunderstood that ; but apart from that, it's ok!

like image 39
nbonneel Avatar answered Sep 20 '22 23:09

nbonneel