src/shplnrm.c

00001 
00006 /*
00007  *  PROGRAM NAME:  sh
00008  *
00009  *  (c) COPYRIGHT INTERNATIONAL BUSINESS MACHINES
00010  *  CORPORATION 12/1/2001.  ALL RIGHTS RESERVED.
00011  *
00012  *  Please refer to the LICENSE file in the top directory
00013  *
00014  *      author: Mike Henderson mhender@watson.ibm.com
00015  */
00016 
00017 static char *id="@(#) $Id: shplnrm.c,v 1.2 2006/08/17 19:28:17 mhender Exp $";
00018 
00019 #include <shInternal.h>
00020 #include <math.h>
00021 
00031 void shplnrm(int *nv,float *xt,float *yt,float *zt)
00032  {
00033   float *n;
00034   float an;
00035   int m,m1,m2,m3;
00036   int i;
00037   int zero=0;
00038 
00039 /*   Shade and render a polyline with normals */
00040 
00041   n=(float*)malloc(3*(*nv)*sizeof(float));
00042 
00043   for(m=0;m<*nv;m++)
00044    {
00045     m1=m;
00046     m3=m-1;
00047     if(m3<1)m3=*nv;
00048     m2=m+1;
00049     if(m2>*nv)m2=1;
00050     m1=1;
00051     m2=2;
00052     m3=3;
00053     n[3*m]=(yt[m2]-yt[m1])*(zt[m3]-zt[m1])-(yt[m3]-yt[m1])*(zt[m2]-zt[m1]);
00054     n[1+3*m]=(xt[m3]-xt[m1])*(zt[m2]-zt[m1])-(xt[m2]-xt[m1])*(zt[m3]-zt[m1]);
00055     n[2+3*m]=(xt[m2]-xt[m1])*(yt[m3]-yt[m1])-(xt[m3]-xt[m1])*(yt[m2]-yt[m1]);
00056     an=sqrt(n[3*m]*n[3*m]+n[1+3*m]*n[1+3*m]+n[2+3*m]*n[2+3*m]);
00057     if(an==0.)return;
00058     an=1./an;
00059     n[3*m]=n[3*m]*an;
00060     n[1+3*m]=n[1+3*m]*an;
00061     n[2+3*m]=n[2+3*m]*an;
00062    }
00063 
00064   for(i=0;i<*nv-1;i++)
00065     shlnonrm(xt+i,yt+i,zt+i,&(n[3*i]),xt+i+1,yt+i+1,zt+i+1,&(n[3*i+3]),&zero,&zero,&zero);
00066   return;
00067  }

Generated on Thu Aug 17 15:29:43 2006 for sh by  doxygen 1.4.6