/* ***********************************************************************
* *
* Toroid 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 "alloc.h"
#include "math.inc"
#include "graph.inc"
#include "model.inc"
#include "shpmk.inc"
int Theta, DTheta, HalfDTheta;
int Phi, DPhi, HalfDPhi;
int HorzLoop, VertLoop;
void SetupToroid(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+45+45;
DPhi=360/VertLoop;
HalfDPhi=DPhi/2;
Phi=HalfDPhi;
}
void MakeToroidDatabase(float Rho, float R)
{
float CosThetaMinus, SinThetaMinus;
float CosThetaPlus, SinThetaPlus;
float RCosPhiMinus, RSinPhiMinus;
float RCosPhiPlus, RSinPhiPlus;
float x, y, z;
FacetNum=0;
do
{
Phi=HalfDPhi;
CosThetaMinus=CosD(Theta-HalfDTheta);
SinThetaMinus=SinD(Theta-HalfDTheta);
CosThetaPlus=CosD(Theta+HalfDTheta);
SinThetaPlus=SinD(Theta+HalfDTheta);
do
{
RCosPhiMinus=R*CosD(Phi-HalfDPhi);
RSinPhiMinus=R*SinD(Phi-HalfDPhi);
RCosPhiPlus=R*CosD(Phi+HalfDPhi);
RSinPhiPlus=R*SinD(Phi+HalfDPhi);
++FacetNum;
x=(Rho+RCosPhiMinus)*CosThetaMinus;
y=(Rho+RCosPhiMinus)*SinThetaMinus;
z=RSinPhiMinus;
AddVertex(x, y, z);
x=(Rho+RCosPhiMinus)*CosThetaPlus;
y=(Rho+RCosPhiMinus)*SinThetaPlus;
z=RSinPhiMinus;
AddVertex(x, y, z);
x=(Rho+RCosPhiPlus)*CosThetaPlus;
y=(Rho+RCosPhiPlus)*SinThetaPlus;
z=RSinPhiPlus;
AddVertex(x, y, z);
x=(Rho+RCosPhiPlus)*CosThetaMinus;
y=(Rho+RCosPhiPlus)*SinThetaMinus;
z=RSinPhiPlus;
AddVertex(x, y, z);
VertexNumInFacet=1;
Phi+=DPhi;
}
while(Phi<360+HalfDPhi);
Theta+=DTheta;
}
while(Theta<360+HalfDTheta+90);
}
/* ***********************************************************************
* *
* Main Program *
* *
***********************************************************************
*/
void main()
{
Facet=farcalloc(((MaxFacet+1)*(MaxVertexNumInFacet+1)), sizeof(int));
InitVertexMaker();
SetupToroid(60, 60);
MakeToroidDatabase(0.75, 0.25);
SaveData("TOROID.DAT");
ExitGraphics();
farfree(Facet);
}