[go: up one dir, main page]

File: superquad.c

package info (click to toggle)
sipp 3.1-11
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,268 kB
  • ctags: 744
  • sloc: ansic: 8,534; makefile: 304; lex: 65; sh: 14
file content (37 lines) | stat: -rw-r--r-- 1,559 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Object *sipp_superquadric(a1,a2,a3,n,e,alpha)
double a1,a2,a3,n,e,alpha;
{
   int ue = 16, ve = 16;
   int u,v; double uphi = 2*M_PI/ue, vphi = 2*M_PI/ve;
   Object *p = object_create();
   
   if(alpha<=0.) vphi = M_PI/ve;
   if(n<=.1) n = .1;
   if(e<=.1) e = .1;
   for(v=-ve/2; v<=ve/2; v++)
   {
      for(u=-ue/2; u<=ue/2; u++)
      {
         double cu,su,cv,sv,x,y,z;
         cu = cos(u*uphi), su = sin(u*uphi), cv = cos(v*vphi), sv = sin(v*vphi);
         x = a1*(alpha+Pow(cv,n))*Pow(cu,e)*Sgn(cu)*Sgn(cv), y = a2*(alpha+Pow(cv,n))*Pow(su,e)*Sgn(su)*Sgn(cv), z = a3*Pow(sv,n)*Sgn(sv);
         u++;
         vertex_push(x,y,z);
         cu = cos(u*uphi), su = sin(u*uphi), cv = cos(v*vphi), sv = sin(v*vphi);
         x = a1*(alpha+Pow(cv,n))*Pow(cu,e)*Sgn(cu)*Sgn(cv), y = a2*(alpha+Pow(cv,n))*Pow(su,e)*Sgn(su)*Sgn(cv), z = a3*Pow(sv,n)*Sgn(sv);
         vertex_push(x,y,z);
         v++;
         cu = cos(u*uphi), su = sin(u*uphi), cv = cos(v*vphi), sv = sin(v*vphi);
         x = a1*(alpha+Pow(cv,n))*Pow(cu,e)*Sgn(cu)*Sgn(cv), y = a2*(alpha+Pow(cv,n))*Pow(su,e)*Sgn(su)*Sgn(cv), z = a3*Pow(sv,n)*Sgn(sv);
         vertex_push(x,y,z);
         u--;
         cu = cos(u*uphi), su = sin(u*uphi), cv = cos(v*vphi), sv = sin(v*vphi);
         x = a1*(alpha+Pow(cv,n))*Pow(cu,e)*Sgn(cu)*Sgn(cv), y = a2*(alpha+Pow(cv,n))*Pow(su,e)*Sgn(su)*Sgn(cv), z = a3*Pow(sv,n)*Sgn(sv);
         vertex_push(x,y,z);
         v--;
         polygon_push();
      }
   }
   object_add_surface(p,surface_create(&default_surf_desc,default_shader));
   return(p);
}