Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Given a surface in $R^3$ and a point P on the surface, I want to calculate the surface normal in this point, the vector that is perpendicular to the surface.

However, I do not know the whole surface, but merely a random sampling of points on the surface.

How can I calculate a good approximation of the surface normal?

The surface is non-intersecting, smooth and roughly planar, if that matters

share|improve this question
add comment

1 Answer

  1. Select some number of close points of P. Within some radius, or the K closest neighbors.

  2. Fit a plane to those points using Linear least squares. Possibly weigh points closer to P higher, using Weighted least squares. $$ a \cdot \left( x - x_0 \right) + b \cdot \left( y - y_0 \right) + c \cdot \left( z - z_0 \right) = 1 $$ $$ A X = B $$ $$ \hat X = \left( A^\intercal A \right)^{-1} A^\intercal B \\ \textbf{or} \\ \hat X = \left( A^\intercal W A \right)^{-1} A^\intercal W B $$

    A has one row for each point, minus P.
    B is column vector filled with ones.
    X is the vector $ \begin{pmatrix} a & b & c \end{pmatrix}^\intercal $.
    $ \hat X $ is the estimation of X.
    W is a diagonal matrix with the weight of each point.

  3. Calculate the normal of the plane. This is just the norm of X in the above equations.

Here are some papers on the subject:

share|improve this answer
    
Thanks! This is essentially what I am trying to do, but simply fitting a plane seems like a very rough approximation. Is there some way I can use the relationships between the points, such as weighting points that are closer to P higher, or weighting points that are close to each other lower? I an make up some weighting scheme, but ideally I am looking for a method that is based on geometric principles –  HugoRune Jun 28 '12 at 22:04
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.