Programa en C para dibujar un sistema solar usando gráficos por computadora

Requisito previo: Graphics.h , incluir graphics.h en CodeBlocks

Archivos de encabezado requeridos:

  • #incluir <stdio.h>
  • #include <conio.h>
  • #incluir <gráficos.h>
  • #incluir <dos.h>
  • #incluir <matemáticas.h>

Funciones utilizadas:

  • getmaxx(): It returns the maximum X coordinate for current graphics mode and driver.
  • setcolor():  It is used to set the current drawing color to the new color.
  • outtextxy(): It is used to display the text or string at a specified point (x, y) on the screen.
  • rectángulo() : se utiliza para dibujar un rectángulo.
    • Se requieren las coordenadas de la esquina superior izquierda e inferior derecha para dibujar el rectángulo.
    • Left especifica la coordenada X de la esquina superior izquierda, top especifica la coordenada Y de la esquina superior izquierda, right especifica la coordenada X de la esquina inferior derecha, bottom especifica la coordenada Y de la esquina inferior derecha.

Acercarse:

  • Para dibujar un sistema solar, comience con una elipse concéntrica porque todos los caminos del planeta son elípticos.
  • Haz un círculo en el centro de la elipse y rellénalo con pintura amarilla para representar el sol.
  • Dibuja diferentes círculos , rellénalos con diferentes colores y luego elige la coordenada correcta para colocarlos todos en el camino de la elipse.
  • Cambia las posiciones de todos los planetas para que parezcan moverse en una elipse.

A continuación se muestra el programa C para dibujar el sistema solar usando las funciones anteriores discutidas:

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;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por naimishsahu08 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *