C Program to Draw Solar System Using Graphics Programming Full Tutorial For Beginners

  • Post author:
  • Post category:c++
  • Post comments:0 Comments

 

 

solarsystem.c

 

 

 

// C program to draw solar system using
// computer graphics
#include <conio.h>
#include <dos.h>
#include <graphics.h>
#include <math.h>
#include <stdio.h>

// Function to manipulates the position
// of planets on the orbit
void planetMotion(int xrad, int yrad,
                int midx, int midy,
                int x[70], int y[70])
{
    int i, j = 0;

    // Positions of planets in their
    // corresponding orbits
    for (i = 360; i > 0; i = i - 6) {
        x[j] = midx - (xrad * cos((i * 3.14) / 180));
        y[j++] = midy - (yrad * sin((i * 3.14) / 180));
    }

    return;
}

// Driver Code
int main()
{

    // Initialize graphic driver
    int gdriver = DETECT, gmode, err;
    int i = 0, midx, midy;
    int xrad[9], yrad[9], x[9][70], y[9][70];
    int pos[9], planet[9], tmp;

    // Initialize graphics mode by
    // passing the three arguments
    // to initgraph()

    // &gdriver is the address of gdriver
    // variable, &gmode is the address of
    // gmode and "C:\\Turboc3\\BGI" is the
    // directory path where BGI files
    // are stored
    initgraph(&gdriver, &gmode, "");
    err = graphresult();

    if (err ! = grOk) {

        // Error occurred
        printf("Graphics Error: %s",
            grapherrormsg(err));
        return 0;
    }

    // Mid positions at x and y-axis
    midx = getmaxx() - 220;
    midy = getmaxy() - 150;

    // Manipulating radius of all
    // the nine planets
    Planet[0] = 8;
    for (i = 1; i < 9; i++) {
        planet[i] = planet[i - 1] + 1;
    }

    // Offset position for the planets
    // on their corresponding orbit
    for (i = 0; i < 9; i++) {
        pos[i] = i * 6;
    }

    // Orbits for all 9 planets
    Xrad[0] = 70, yrad[0] = 40;
    for (i = 1; i < 9; i++) {
        xrad[i] = xrad[i - 1] + 38;
        yrad[i] = yrad[i - 1] + 20;
    }

    // Positions of planets on their
    // corresponding orbits
    for (i = 0; i < 9; i++) {
        planetMotion(xrad[i], yrad[i],
                    midx, midy, x[i],
                    y[i]);
    }

    while (!kbhit()) {

        // Drawing 9 orbits
        Setcolor(WHITE);
        for (i = 0; i < 9; i++) {
            setcolor(CYAN);
            ellipse(midx, midy, 0, 360,
                    xrad[i], yrad[i]);
        }

        // Sun at the mid of solar system
        outtextxy(midx, midy, " SUN");
        setcolor(YELLOW);
        setfillstyle(SOLID_FILL, YELLOW);
        circle(midx, midy, 30);
        floodfill(midx, midy, YELLOW);

        // Mercury in first orbit
        Setcolor(CYAN);

        Setfillstyle(SOLID_FILL, CYAN);
        Outtextxy(x[0][pos[0]],
                y[0][pos[0]],
                " MERCURY");

        Pieslice(x[0][pos[0]],
                y[0][pos[0]],
                0, 360, planet[0]);

        // Venus in second orbit
        Setcolor(GREEN);
        Setfillstyle(SOLID_FILL, GREEN);
        Outtextxy(x[1][pos[1]],
                y[1][pos[1]],
                " VENUS");
        Pieslice(x[1][pos[1]],
                y[1][pos[1]],
                0, 360, planet[1]);

        // Earth in third orbit
        Setcolor(BLUE);
        Setfillstyle(SOLID_FILL, BLUE);
        Outtextxy(x[2][pos[2]],
                y[2][pos[2]],
                " EARTH");
        Pieslice(x[2][pos[2]],
                y[2][pos[2]],
                0, 360, planet[2]);

        // Mars in fourth orbit
        Setcolor(RED);
        Setfillstyle(SOLID_FILL, RED);
        Outtextxy(x[3][pos[3]],
                y[3][pos[3]],
                " MARS");
        Pieslice(x[3][pos[3]],
                y[3][pos[3]],
                0, 360, planet[3]);

        // Jupiter in fifth orbit
        setcolor(BROWN);
        setfillstyle(SOLID_FILL, BROWN);
        outtextxy(x[4][pos[4]],
                y[4][pos[4]],
                " JUPITER");
        pieslice(x[4][pos[4]],
                y[4][pos[4]],
                0, 360, planet[4]);

        // Saturn in sixth orbit
        Setcolor(LIGHTGRAY);
        Setfillstyle(SOLID_FILL, LIGHTGRAY);
        Outtextxy(x[5][pos[5]],
                y[5][pos[5]],
                " SATURN");
        Pieslice(x[5][pos[5]],
                y[5][pos[5]],
                0, 360, planet[5]);

        // Uranus in seventh orbit
        Setcolor(LIGHTGREEN);
        Setfillstyle(SOLID_FILL, LIGHTGREEN);
                Outtextxy (x [6] [pos [6]],
                        y [6] [pos [6]],
                        “ URANUS");
                pieslice (x [6] [pos [6]],
                        y [6] [pos [6]],
                        0, 360, planet [6]);

        // Neptune in eighth orbit
        Setcolor (LIGHTBLUE);
        Setfillstyle (SOLID_FILL, LIGHTBLUE);
        Outtextxy (x [7] [pos [7]],
                y [7] [pos [7]],
                " NEPTUNE");
        Pieslice (x [7] [pos [7]],
                y [7] [pos [7]],
                0, 360, planet [7]);

        // Pluto in ninth orbit
        Setcolor (LIGHTRED);
        Setfillstyle (SOLID_FILL, LIGHTRED);
        Outtextxy (x [8] [pos [8]],
                y [8] [pos [8]],
                " PLUTO");
        Pieslice (x [8] [pos [8]],
                y [8] [pos [8]],
                0, 360, planet [8]);

        // Checking for one complete
        // rotation
        for (i = 0; i < 9; i++) {
            if (pos[i] <= 0) {
                pos[i] = 59;
            }
            else {
                pos[i] = pos[i] - 1;
            }
        }
                            
        // Sleep for 100 milliseconds
        Delay (100);
                            
        // Clears graphic screen
        Cleardevice ();
    }

    // Deallocate memory allocated
    // for graphic screen
    closegraph();

    return 0;
}

 

 

Leave a Reply