Metropoli BBS
VIEWER: sphere.c MODE: TEXT (ASCII)
/* ***********************************************************************
   *									 *
   *		          Sphere Database Generator		         *
   *									 *
   *				Program by				 *
   *			   Christopher D. Watkins			 *
   *									 *
   *			     'C' conversion by				 *
   *                            Larry Sharp				 *
   *									 *
   ***********************************************************************
*/

#include "stdio.h"
#include "dos.h"
#include "conio.h"
#include "math.h"
#include "string.h"
#include "malloc.h"
#include "defs.h"
#include "globals.h"
#include "mathb.h"
#include "graphb.h"
#include "modelsup.h"
#include "shpmk.h"

int Theta, DTheta, HalfDTheta;
int Phi, DPhi, HalfDPhi;
int HorzLoop, VertLoop;
int Horz, Vert;
float SinPhi, CosPhi;

void SetupSphere(int Horizontal, int Vertical)
{
  VertexNum=1;
  VertexNumInFacet=1;
  HorzLoop=Horizontal;
  VertLoop=Vertical;
  LastFacet=HorzLoop*VertLoop;
  LastVertexNumInFacet=MaxVertexNumInFacet;
  LastVertex=LastFacet*LastVertexNumInFacet;
  DTheta=360/HorzLoop;
  HalfDTheta=DTheta/2;
  Theta=HalfDTheta;
  DPhi=180/VertLoop;
  HalfDPhi=DPhi/2;
  Phi=HalfDPhi;
}

void MakeSphereDatabase()
{
  Horz=1;
  Vert=1;
  for(FacetNum=1; FacetNum<=LastFacet; FacetNum++)
  {
    SinPhi=SinD(Phi+HalfDPhi);
    CosPhi=CosD(Phi+HalfDPhi);
    AddVertex(SinPhi*CosD(Theta-HalfDTheta), SinPhi*SinD(Theta-HalfDTheta), CosPhi);
    AddVertex(SinPhi*CosD(Theta+HalfDTheta), SinPhi*SinD(Theta+HalfDTheta), CosPhi);
    SinPhi=SinD(Phi-HalfDPhi);
    CosPhi=CosD(Phi-HalfDPhi);
    AddVertex(SinPhi*CosD(Theta+HalfDTheta), SinPhi*SinD(Theta+HalfDTheta), CosPhi);
    AddVertex(SinPhi*CosD(Theta-HalfDTheta), SinPhi*SinD(Theta-HalfDTheta), CosPhi);
    Theta+=DTheta;
    VertexNumInFacet=1;
    ++Horz;
    if(Horz>HorzLoop)
    {
      Horz=1;
      ++Vert;
      Theta=HalfDTheta;
      Phi+=DPhi;
    }
  }
}

/* ***********************************************************************
   *									 *
   *				Main Program				 *
   *									 *
   ***********************************************************************
*/

void main()
{
  Facet=farcalloc(((MaxFacet+1)*(MaxVertexNumInFacet+1)), sizeof(int));
  InitVertexMaker();
  SetupSphere(60, 45);
  MakeSphereDatabase();
  SaveData("SPHERE.DAT");
  Exit_Graphics();
  farfree(Facet);
}
[ RETURN TO DIRECTORY ]