/* ***********************************************************************
* *
* 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);
}