       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:=
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:=
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:=
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:=
rxcrossry[x_,y_]:=Cross[rx[x,y],ry[x,y]]

(* divide by length for normalization *)

In:=
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:=
normvectable=
Flatten[Table[{{xx,yy,surface[xx,yy]},normalvector[xx,yy]},{xx,1,3,
0.3},{yy,1,3,0.3}],1];

In:=
<<Graphics`PlotField3D`

In:=
?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 *)

In:=
ScaleFactor->0.3,ColorFunction->(Hue&)];

In:=
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