/* samp1.c */

# include <stdio.h>
# include <math.h>
# include "nanzan.h"

SaveData( int chars, int count[], double x_old[][8][14],double y_old[][8][14],
double z_old[][8][14], double x[][8][14], double y[][8][14],double z[][8][14] )
{
    int i, j, k;
    for(i=0; i<2; i++)
        for(j=0; j<chars; j++)
	    for(k=0; k<count[j]; k++ ) {
		x_old[i][j][k] = x[i][j][k];
                y_old[i][j][k] = y[i][j][k];
                z_old[i][j][k] = z[i][j][k];
	    }
}

DrawFrame( int chars, int count[], double x[][8][14], double y[][8][14] )
{
    int i, j, k;
    for(i=0; i<2; i++)
        for(j=0; j<chars; j++)
	    for(k=0; k<count[j]; k++ ) {
		_XDrawLine( (int)(x[i][j][k]+250), (int)(y[i][j][k]+250),
		    (int)(x[i][j][((k+1)%count[j])]+250),
                    (int)(y[i][j][((k+1)%count[j])]+250) );
	    }
    for(i=0; i<2; i++)
        for(j=0; j<chars; j++)
            for(k=0; k<count[j]; k++ ) {
	        _XDrawLine( (int)(x[i][j][k]+250), (int)(y[i][j][k]+250),
		    (int)(x[(i+1)%2][j][k]+250),
		    (int)(y[(i+1)%2][j][k]+250) );
	    }
    _XFlush;
}

main()
{
    double x1, y1, z1, x2, y2, z2, x3, y3;
    double alpha, beta, gamma, delta;
    double x_old[2][8][14], y_old[2][8][14], z_old[2][8][14];
    int chars = 8;
    static int count[8] = { 6, 4, 4, 12, 4, 4, 10, 10 };
    static double x[2][8][14]={{{0-300, 10-300, 10-300, 50-300, 50-300, 0-300},
                                {0-200, 50-200, 50-200, 0-200 },
                                {10-200, 40-200, 40-200, 10-200},
                                {0-100, 50-100, 50-100, 10-100, 10-100, 40-100,
                                 40-100, 25-100, 25-100, 50-100,50-100,0-100 },
                                {0-0, 50-0, 50-0, 0-0 },
                                {10-0, 40-0, 40-0, 10-0},
                                {0+100, 50+100, 50+100, 10+100, 10+100, 50+100,
                                 50+100, 10+100, 10+100, 0+100 },
                                {0+200, 50+200, 50+200, 10+200, 10+200, 50+200,
                                 50+200, 10+200, 10+200, 0+200 } } };
    static double y[2][8][14] = { { {0, 0, -100, -100, -110, -110},
                                    {0, 0, -110, -110},
                                    {-10, -10, -100, -100 },
			            {0,0,-10,-10,-100,-100, -60, -60, -50, -50,
                                     -110, -110 },
                                    {0, 0, -110, -110},
                                    {-10, -10, -100, -100 },
			            {0,0,-10,-10,-50,-50,-60,-60,-110,-110},
			            {0,0,-10,-10,-50,-50,-60,-60,-110,-110}} };
    static double z[2][8][14];
    int i, j, k;

    _XOpen;
    alpha = 3.141592 / 15; beta = 0; gamma = 3.141592/15;
    for(i=0; i<chars; i++) {
        for(j=0; j<count[i]; j++){
            x[1][i][j] = x[0][i][j];
	    y[1][i][j] = y[0][i][j];
            z[1][i][j] = -50;
            z[0][i][j] = 0;
	}
    }
    DrawFrame( chars, count, x, y );
    SaveData( chars, count, x_old, y_old, z_old, x, y, z );
    while(1) {
        usleep(100000);
	_XSetBlack;
	DrawFrame( chars, count, x_old, y_old );
        for(i=0; i<2; i++) {
            for(j=0; j<chars; j++ ) {
		for(k=0; k<count[j]; k++) {
                    x1 = x[i][j][k]; y1 = y[i][j][k]; z1 = z[i][j][k];
	            x2 = x1;
                    y2 = y1 * cos( alpha ) - z1 * sin( alpha );
                    z2 = y1 * sin( alpha ) + z1 * cos( alpha );
                    x3 = x2 * cos( beta ) + z2 * sin( beta );
                    y3 = y2;
                    x[i][j][k] = x3 * cos( gamma ) - y3 * sin( gamma );
                    y[i][j][k] = x3 * sin( gamma ) + y3 * cos( gamma );
                    z[i][j][k] = -x2 * sin( beta ) + z2 * cos( beta );
		}
            }
        }
        _XSetYellow;
	DrawFrame( chars, count, x, y );
        SaveData( chars, count, x_old, y_old, z_old, x, y, z );
    }
}

/* End of file samp1.c ----- */
