MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Normal vector on a surface

  • To: mathgroup at smc.vnet.net
  • Subject: [mg29294] Re: Normal vector on a surface
  • From: Albert Retey <albert.retey at visualanalysis.com>
  • Date: Tue, 12 Jun 2001 04:18:16 -0400 (EDT)
  • Organization: Visual Analysis AG
  • References: <9fsil6$so5$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Matthias,

> Now I want to calculate (how?) and draw (how?) several "Normalenvektors"
> (sorry, I do not know the English termini technici) which should sit smugly
> - like palisades - on the plane tangential to the surface.

I think it is as simple as "normal vector" :-)

> The "Normalenvektor" N in point P - according to Bronstein-Semendjajew - is
> a unity vector perpendicular to the tangential plane; its accompanying
> vectors e1 and e2 on the plane form a "right-handed system". N, e1 and e2
> are referred to as the "accompanying tripod". - I understand the words but
> not their meaning.

One simple way to determine the normal vector of a surface is to find
two (linear independent) tangential vectors to the surface. Then find a
vector that is perpendicular to those two and has length one. If you
have expressed the surface as z=z[x,y], as in your case, the most simple
choice for the two tangential vectors is the ones in "x-" and
"y-direction", that is e1 and e2 (If you choose other coordinates, e1
and e2 might change, but not the normal vector). The fact that these
three vectors should form a right-handed-system is then just a
convention, because there are actually two choices of sign: for your
surface the normal vectors could either point "up" or "down".

Here is a simple way to calculate and visualize the normal vectors of
your surface (basically using the definitions in Bronstein):

In[200]:=
surf[x1_,y1_]:=
    19.74211746962547-61.78321746073334*x1+70.84823523445556*
       
x1^2-34.64681309362152*x1^3+5.822595947190386*x1^4-61.783217460733795*
        y1+188.56171712734522*x1*y1-208.7457484391798*x1^2*
        y1+99.21114279328117*x1^3*y1-16.223098505477388*x1^4*
       
y1+70.8482352344551*y1^2-208.7457484391805*x1*y1^2+225.08774661852397*
        x1^2*y1^2-103.5151716236312*x1^3*y1^2+16.351931921608763*x1^4*
        y1^2-34.64681309362163*y1^3+99.21114279328117*x1*
        y1^3-103.51517162363109*x1^2*y1^3+45.654124756950296*x1^3*
        y1^3-6.928857192755963*x1^4*y1^3+5.822595947190411*
        y1^4-16.22309850547743*x1*y1^4+16.351931921608763*x1^2*
        y1^4-6.928857192755952*x1^3*y1^4+1.0137658500940734*x1^4*y1^4;

In[202]:=
surfplot=
    Plot3D[surf[x,y],{x,1,3},{y,1,3},PlotRange->All,PlotPoints->100,
      Mesh->False];


(* This are the tangential vectors r_u and r_v in Bronstein, for the
special case u=x and v=y *)

In[203]:=
rx[x_,y_]:={1,0,D[surf[x,y],x]}
ry[x_,y_]:={0,1,D[surf[x,y],y]}

(* the cross product (will be perpendicular to rx and ry) *)

In[205]:=
rxcrossry[x_,y_]:=Cross[rx[x,y],ry[x,y]]

(* divide by length for normalization *)

In[206]:=
normalvector[x_,y_]:=
  Evaluate[rxcrossry[x,y]/Sqrt[rxcrossry[x,y].rxcrossry[x,y]]]

(* make a table of normal vectors in the form appropriate for
ListPlotVectorField *)

In[207]:=
normvectable=
    Flatten[Table[{{xx,yy,surface[xx,yy]},normalvector[xx,yy]},{xx,1,3,
          0.3},{yy,1,3,0.3}],1];

In[208]:=
<<Graphics`PlotField3D`

In[209]:=
?ListPlotVectorField3D

"ListPlotVectorField3D[{{pt,vec},...},(options)] plots a list \
of vectors in three dimensions, each vector based at a corresponding
point \
pt."

(* I tried to make the plot look somewhat better by scaling the length
and plot the vectors in red = Hue[1] *)

In[210]:=
normvecplot=ListPlotVectorField3D[normvectable,VectorHeads->True,
      ScaleFactor->0.3,ColorFunction->(Hue[1]&)];

In[211]:=
Show[surfplot,normvecplot,AspectRatio->1];

You will see that the vectors plotted do not exactly meet what you
probably expect concerning perpendicularity, I guess it should be
possible to find a ViewPoint that makes the plot look somewhat better...

Hope that helps,

Albert

--
Visual Analysis AG       Internet: www.visualanalysis.com
Neumarkter Str. 87       Telefon: 089 / 431 981 36        
D-81673 Muenchen         Telefax: 089 / 431 981 1


  • Prev by Date: Re: Re: OOP in Mathematica
  • Next by Date: Re: Need help writing geology software using cirlces
  • Previous by thread: Re: Normal vector on a surface
  • Next by thread: Delphi