# surfnorm

## Purpose

Compute and display 3-D surface normals.

## Synopsis

````[Nx,Ny,Nz] = surfnorm(X,Y,Z)`
`[Nx,Ny,Nz] = surfnorm(Z)`
`surfnorm(Z)`
`surfnorm(X,Y,Z)`
```

## Description

`[Nx,Ny,Nz] = surfnorm(X,Y,Z)` returns the components of the three-dimensional surface normals for the surface defined by the matrices `X`, `Y`, and `Z`. The surface normals are unnormalized and are valid at each vertex.` surfnorm` is used by `surfl` to compute surface normals.

`[Nx,Ny,Nz] = surfnorm(Z)` returns the normal vector components for the surface defined by `Z`.

`surfnorm(Z)` and `surfnorm(X,Y,Z)` plot the surface with the normals emanating from it. Normals are not shown for surface elements that face away from the viewer.

The direction of the normals is reversed by calling `surfnorm` with transposed arguments.

````surfnorm(X',Y',Z')`
```

## Algorithm

The surface normals are based on a bicubic fit of the data in the `X`, `Y`, and `Z` matrices. For each vertex, diagonal vectors are computed and crossed to form the normal.

## Examples

Plot the normal vectors for a truncated cone.

``````[x,y,z] = cylinder(1:10);

surfnorm(x,y,z)```
`         `

```

````diffuse`, `specular`, `surfl`