Programa C para realizar el reflejo de la imagen 2D dada usando gráficos de computadora

En este artículo, discutiremos cómo realizar la reflexión en C usando gráficos de computadora usando la lógica en lugar de la fórmula matricial directa de traslación seguida de rotación y traslación.

Esta técnica se ha aplicado actualmente para el objeto tomado como un triángulo, el código se puede aplicar a cualquier objeto, siempre que se adapten las coordenadas (X n , Y n ) al mismo.

La lógica base de esta técnica es que en cualquier reflexión dada, la inversión lateral del objeto reflejado está a la misma distancia de cualquier lado dado que el objeto fuente. es decir, si un objeto fuente está a una distancia de 10 píxeles de la izquierda, entonces el objeto reflejado estará a una distancia de 10 píxeles de la derecha y lo mismo se aplica a los lados superior e inferior.

Ejemplo en una base de la vida real :

  • Si una persona está de pie frente a un espejo, la distancia entre la mano derecha de la persona y el límite derecho del espejo será la misma que la distancia entre el reflejo de la mano izquierda de la persona y el límite izquierdo.
  • Para la conveniencia de mostrar la técnica anterior a través de un programa, dibujemos el objeto fuente en el segundo cuadrante del gráfico, pero se puede hacer desde cualquier cuadrante con cambios menores en el código.

Pasos de la técnica antes mencionada :

  • Cree un objeto en el segundo cuadrante del gráfico proporcionando las coordenadas.
  • Para la reflexión a lo largo del eje X:
    • Las coordenadas del eje Y seguirán siendo las mismas.
    • Obtenga la distancia de las coordenadas del eje X invertidas lateralmente calculando la distancia entre la coordenada X del objeto de origen y su superficie más cercana a lo largo del eje X.
    • Dibuje otro objeto usando las coordenadas X invertidas lateralmente obtenidas del paso anterior mientras mantiene la misma coordenada Y.
    • Los pasos anteriores generarán una imagen especular o un reflejo del objeto de origen.
    • En este escenario , el objeto reflejado se formará en el 1er cuadrante .
  •  Para la reflexión a lo largo del eje Y:
    • Las coordenadas del eje X seguirán siendo las mismas.
    • Obtenga la distancia de las coordenadas del eje Y invertidas lateralmente calculando la distancia entre la coordenada Y del objeto de origen y su superficie más cercana a lo largo del eje Y.    
    • Dibuje otro objeto usando las coordenadas Y invertidas lateralmente obtenidas del paso anterior mientras mantiene la misma coordenada X.
    • Los pasos anteriores generarán una imagen especular o un reflejo del objeto de origen.
    • En este escenario , el objeto reflejado se formará en el 3er cuadrante .
  • 2c. Para la reflexión a lo largo del origen:
    • Las coordenadas del eje X y del eje Y cambiarán.
    • Obtenga la distancia de la coordenada del eje Y invertida lateralmente calculando la distancia entre la coordenada Y del objeto de origen y su superficie más cercana a lo largo del eje Y.
    • Obtenga la distancia de coordenadas del eje X invertida lateralmente calculando la distancia entre la coordenada X del objeto de origen y su superficie más cercana a lo largo del eje X. 
    • Dibuje otro objeto usando las coordenadas X e Y invertidas lateralmente obtenidas de los pasos anteriores.
    • Los pasos anteriores generarán una imagen especular o un reflejo del objeto de origen.
    • Esta vez, el reflejo es sobre el origen ya que las coordenadas X e Y han cambiado, empujando el objeto de adentro hacia afuera.
    • En este escenario , el objeto reflejado se formará en el cuadrante .

Acercarse:

  1. Dibuje una línea en gráficos para que actúe como un eje Y, pasando 4 valores como parámetros de la función line() como line(getmaxx()/2, 0, getmaxx()/2, getmaxy()) .
  2. Dibuje una línea en gráficos para que actúe como eje X al pasar 4 valores como parámetros de la función line() como line(0, getmaxy()/2, getmaxx(), getmaxy()/2) .
  3. Dibuja un objeto usando la función line() con parámetros de variables establecidas.
  4. Realice la reflexión y dibuje el objeto a lo largo del origen usando el Paso 3 de la técnica y coloréelo de rojo para distinguirlo de otros objetos.
  5. Realice la reflexión y dibuje el objeto a lo largo del eje X utilizando el Paso 1 de la técnica y coloréelo de cian para distinguirlo de otros objetos.
  6. Realice la reflexión y dibuje el objeto a lo largo del eje Y usando el Paso 2 de la técnica y coloréelo de verde para distinguirlo de otros objetos.

A continuación se muestra la implementación del enfoque anterior:

C

// C program for the above approach
  
#include <conio.h>
#include <graphics.h>
#include <stdio.h>
  
// Driver Code
void main()
{
    // Initialize the drivers
    int gm, gd = DETECT, ax, x1 = 100;
    int x2 = 100, x3 = 200, y1 = 100;
    int y2 = 200, y3 = 100;
  
    // Add in your BGI folder path
    // like below initgraph(&gd, &gm,
    // "C:\\TURBOC3\\BGI");
    initgraph(&gd, &gm, "");
    cleardevice();
  
    // Draw the graph
    line(getmaxx() / 2, 0, getmaxx() / 2,
         getmaxy());
    line(0, getmaxy() / 2, getmaxx(),
         getmaxy() / 2);
  
    // Object initially at 2nd quadrant
    printf("Before Reflection Object"
           " in 2nd Quadrant");
  
    // Set the color
    setcolor(14);
    line(x1, y1, x2, y2);
    line(x2, y2, x3, y3);
    line(x3, y3, x1, y1);
    getch();
  
    // After reflection
    printf("\nAfter Reflection");
  
    // Reflection along origin i.e.,
    // in 4th quadrant
    setcolor(4);
    line(getmaxx() - x1, getmaxy() - y1,
         getmaxx() - x2, getmaxy() - y2);
  
    line(getmaxx() - x2, getmaxy() - y2,
         getmaxx() - x3, getmaxy() - y3);
  
    line(getmaxx() - x3, getmaxy() - y3,
         getmaxx() - x1, getmaxy() - y1);
  
    // Reflection along x-axis i.e.,
    // in 1st quadrant
    setcolor(3);
    line(getmaxx() - x1, y1,
         getmaxx() - x2, y2);
    line(getmaxx() - x2, y2,
         getmaxx() - x3, y3);
    line(getmaxx() - x3, y3,
         getmaxx() - x1, y1);
  
    // Reflection along y-axis i.e.,
    // in 3rd quadrant
    setcolor(2);
    line(x1, getmaxy() - y1, x2,
         getmaxy() - y2);
    line(x2, getmaxy() - y2, x3,
         getmaxy() - y3);
    line(x3, getmaxy() - y3, x1,
         getmaxy() - y1);
    getch();
  
    // Close the graphics
    closegraph();
}

Producción:

Publicación traducida automáticamente

Artículo escrito por KrishnaKhanth 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 *