Metropoli BBS
VIEWER: conepyrm.c MODE: TEXT (ASCII)
/* ***********************************************************************
   *                                                                     *
   *                 Cone and Pyramid 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;

void SetupCone(int NumOfFacets)
{
  VertexNum=1;
  VertexNumInFacet=1;
  LastFacet=NumOfFacets;
  LastVertexNumInFacet=4;
  LastVertex=LastFacet*LastVertexNumInFacet;
  DTheta=360/LastFacet;
  HalfDTheta=DTheta/2;
  Theta=HalfDTheta;
}

int NumFacetsOnEndCap, T;

void EndCap()
{
  int tmp;

  NumFacetsOnEndCap=LastFacet/2-1;
  tmp=NumFacetsOnEndCap&1;
  if(tmp==1)
    Theta=-90+HalfDTheta;
  else
    Theta=-90+DTheta;
  if(LastFacet==4)
    NumFacetsOnEndCap=2;
  for(T=1; T<=NumFacetsOnEndCap; T++)
  {
    AddVertex(CosD(Theta+HalfDTheta), SinD(Theta+HalfDTheta), -1.0);
    AddVertex(CosD(Theta-HalfDTheta), SinD(Theta-HalfDTheta), -1.0);
    AddVertex(CosD(180-Theta+HalfDTheta), SinD(180-Theta+HalfDTheta), -1.0);
    AddVertex(CosD(180-Theta-HalfDTheta), SinD(180-Theta-HalfDTheta), -1.0);
    ++FacetNum;
    ++LastFacet;
    VertexNumInFacet=1;
    Theta+=DTheta;
  }
}

void MakeConeDatabase()
{
  for(FacetNum=1; FacetNum<=LastFacet; FacetNum++)
  {
    AddVertex(CosD(Theta-HalfDTheta), SinD(Theta-HalfDTheta), -1.0);
    AddVertex(CosD(Theta+HalfDTheta), SinD(Theta+HalfDTheta), -1.0);
    AddVertex(0.0, 0.0, 1.0);
    AddVertex(0.0, 0.0, 1.0);
    Theta+=DTheta;
    VertexNumInFacet=1;
  }
  EndCap();
}

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

void main()
{
  Facet=farcalloc(((MaxFacet+1)*(MaxVertexNumInFacet+1)), sizeof(int));
  InitVertexMaker();
  SetupCone(4);
  MakeConeDatabase();
  SaveData("PYRAMID.DAT");
  SetupCone(180);
  MakeConeDatabase();
  SaveData("CONE.DAT");
  Exit_Graphics();
  farfree(Facet);
}
[ RETURN TO DIRECTORY ]