8
\$\begingroup\$

Given the point

Vector pos = new Vector(0.0, 0.20156815648078918, -78.30000305175781, 1.0); 

and the plane (triangle)

Vector a = new Vector(-6.599999904632568, 0.0, -78.5, 1.0); Vector b = new Vector(6.599999904632568, 0.0, -78.5, 1.0); Vector c = new Vector(6.599999904632568, 4.400000095367432, -78.5, 1.0); 

I want to get a plane normal pointing in the direction of pos

//Getting plane normal Vector ac = Vector.Subtract(a,c); Vector bc = Vector.Subtract(b,c); Vector planeNormal = Vector.CrossProduct(bc, ac); //Testing which side of the plane the point is on double dprod = Vector.DotProduct(planeNormal, pos); if (dprod < 0) { planeNormal.Negate(); } 

But this method is wrong. The resulting planeNormal points in the negative Z direction, so it should not be negated. Is there a best practise for this? Please help me, I fail massively @ math :)

\$\endgroup\$
1
  • \$\begingroup\$ I'd normalize the normal, if you're using a similar method for lighting calculations. \$\endgroup\$ Commented Apr 23, 2011 at 2:18

1 Answer 1

9
\$\begingroup\$

Your method is mostly correct but misses one step. You can't simply use the point's position as the vector to get a dot product with, you need to create a direction vector from a point on the plane. Any point on the plane will do (the direction doesn't need to be exact) so just use one of the corners.

\$\endgroup\$
2
  • \$\begingroup\$ Cool. Why doesn't it matter which point on the plane is chosen? \$\endgroup\$ Commented May 15, 2012 at 2:52
  • \$\begingroup\$ Because you're only looking for positive or negative from the dot product at the end. Regardless of the exact value calculated, the dot product is positive for vectors pointing at one side and negative for vectors pointing at the other. \$\endgroup\$ Commented May 15, 2012 at 12:50

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.