home *** CD-ROM | disk | FTP | other *** search
/ Big Blue Disk 16 / bbd16.zip / IPLOT.SP < prev    next >
Text File  |  1983-09-03  |  3KB  |  115 lines

  1.  BEGIN
  2.   
  3.   COMMENT
  4.           This program will plot a set of points in three 
  5.           dimensions using the high resolution graphics.   ;
  6.  
  7.   REAL extent,vx,vy,topx,topy;
  8.   REAL ARRAY x(500),y(500),z(500);
  9.   INTEGER limit,i;
  10.  
  11.   PROCEDURE Plotter;
  12.   BEGIN
  13.    COMMENT This procedure scales and plots the points on
  14.            the computer screen. ;
  15.  
  16.    INTEGER i;
  17.    REAL maxx,maxy,minx,miny,difx,dify;
  18.  
  19.    maxx := -1*10^30; maxy := maxx; minx := 1*10^30; miny := minx;
  20.    topx := 639; topy := 200;
  21.  
  22.    FOR i := 1 STEP 1 UNTIL limit DO
  23.    BEGIN
  24.     IF x(i) >= maxx THEN maxx := x(i);
  25.     IF x(i) <= minx THEN minx := x(i);
  26.     IF y(i) >= maxy THEN maxy := y(i);
  27.     IF y(i) <= miny THEN miny := y(i);
  28.    END
  29.  
  30.    COMMENT The maximum and minimum x and y values are computed. ;
  31.  
  32.    difx := maxx-minx; dify := maxy-miny;
  33.  
  34.    FOR i := 1 STEP 1 UNTIL limit DO
  35.    BEGIN
  36.     x(i) := ((x(i)-minx)/difx)*topx;
  37.     y(i) := ((y(i)-miny)/dify)*topy;
  38.     PSET(x(i),topy-y(i)),7;
  39.    END
  40.  
  41.   END
  42.  
  43.   PROCEDURE Convert_3D_to_2D;
  44.   BEGIN
  45.  
  46.    COMMENT This procedure converts 3 dimensional coordinates to
  47.            2 dimensional coordinates.                           ;
  48.  
  49.    REAL cosine_45,sine_45;
  50.    INTEGER i;
  51.  
  52.    cosine_45 := COS((45.*3.14159)/180.);
  53.    sine_45 := SIN((45.*3.14159)/180.);
  54.  
  55.    FOR i := 1 STEP 1 UNTIL limit DO
  56.    BEGIN
  57.     x(i) := x(i) + (extent-y(i))*cosine_45;
  58.     y(i) := z(i) + (extent-y(i))*sine_45;
  59.    END
  60.  
  61.   END
  62.  
  63.  
  64.  
  65.   COMMENT This is the start of the main program. ;
  66.  
  67.  
  68.  
  69.   HOME; SCREEN 2;
  70.  
  71.   Start_plot:
  72.  
  73.   INPUT('Enter the scale factor:' @ extent); HOME;
  74.   
  75.   OUTPUT('.... WAIT ....');
  76.  
  77.   IF extent < 0 THEN GO Finish;
  78.   i:=1;
  79.   FOR vx := -1. STEP .1 UNTIL 1. DO
  80.   BEGIN
  81.    FOR vy := -1. STEP .1 UNTIL 1. DO
  82.    BEGIN
  83.     x(i) := vx; y(i) := vy; z(i) := SQR(2.-vx^2-vy^2); i := i+1;
  84.    END
  85.   END
  86.  
  87.   COMMENT Points have been computed,now set up axes. ;
  88.  
  89.   x(i+1) := extent; y(i+1) := 0; z(i+1) := 0;
  90.   x(i+2) := -extent; y(i+2) := 0; z(i+2) := 0;
  91.   x(i+3) := 0; y(i+3) := extent; z(i+3) := 0;
  92.   x(i+4) := 0; y(i+4) := -extent; z(i+4) := 0;
  93.   x(i+5) := 0; y(i+5) := 0; z(i+5) := extent;
  94.   x(i) := 0; y(i) := 0; z(i) := -extent;
  95.   limit := i+5;
  96.  
  97.  
  98.   Convert_3D_to_2D;
  99.  
  100.   HOME;
  101.  
  102.   Plotter;
  103.  
  104.   OUTPUT( DATE$ + ' ' + TIME$ );
  105.  
  106.   LINE (x(i+1),topy-y(i+1)) - (x(i+2),topy-y(i+2)),7;
  107.   LINE (x(i+3),topy-y(i+3)) - (x(i+4),topy-y(i+4)),7;
  108.   LINE (x(i),topy-y(i)) - (x(i+5),topy-y(i+5)),7;
  109.  
  110.   Busy: IF INKEY$ = '' THEN GO TO Busy;
  111.         ELSE GO TO Start_plot;
  112.  
  113.   Finish:
  114.  END 
  115.