home *** CD-ROM | disk | FTP | other *** search
/ Altsys Virtuoso 2.0K / virtuoso_20k.iso / DemoApps / Graphics / Viewers / raytracers / rpi / Source / vector.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-08  |  948 b   |  91 lines

  1.  
  2. /*
  3.  * (c) 1988 by George Kyriazis
  4.  */
  5.  
  6. /*
  7.  *    vector operations 
  8.  */
  9.  
  10. #include    "ray.h"
  11. #include    <math.h>
  12.  
  13. struct    vector    vadd(a,b)
  14. struct    vector    a,b;
  15. {
  16.     struct    vector    c;
  17.  
  18.     c.x=a.x+b.x;
  19.     c.y=a.y+b.y;
  20.     c.z=a.z+b.z;
  21.  
  22.     return c;
  23. }
  24.  
  25. struct    vector    vsub(a,b)
  26. struct    vector    a,b;
  27. {
  28.     struct    vector    c;
  29.  
  30.     c.x=a.x-b.x;
  31.     c.y=a.y-b.y;
  32.     c.z=a.z-b.z;
  33.  
  34.     return c;
  35. }
  36.  
  37. struct    vector    vneg(a)
  38. struct    vector    a;
  39. {
  40.     struct    vector    b;
  41.  
  42.     b.x= -a.x;
  43.     b.y= -a.y;
  44.     b.z= -a.z;
  45.  
  46.     return b;
  47. }
  48.  
  49. struct    vector    svproduct(k,a)
  50. double    k;
  51. struct    vector    a;
  52. {
  53.     a.x*=k;
  54.     a.y*=k;
  55.     a.z*=k;
  56.  
  57.     return a;
  58. }
  59.  
  60. double    vdot(a,b)
  61. struct    vector    a,b;
  62. {
  63.     return (a.x*b.x+a.y*b.y+a.z*b.z);
  64. }
  65.  
  66. struct    vector    vcross(a,b)
  67. struct    vector    a,b;
  68. {
  69.     struct    vector    c;
  70.  
  71.     c.x=a.y*b.z-b.y*a.z;
  72.     c.y=b.x*a.z-a.x*b.z;
  73.     c.z=a.x*b.y-b.x*a.y;
  74.  
  75.     return c;
  76. }
  77.  
  78. struct    vector    norm(a)
  79. struct    vector    a;
  80. {
  81.     double len;
  82.     struct    vector    b;
  83.  
  84.     len=sqrt(a.x*a.x+a.y*a.y+a.z*a.z);
  85.     b.x=a.x/len;
  86.     b.y=a.y/len;
  87.     b.z=a.z/len;
  88.  
  89.     return    b;
  90. }
  91.