C program to perform reflection of the given 2D image using computer graphics - GeeksforGeeks

04 May, 2021
In this article, we will discuss how to perform reflection in C using computer graphics using logic rather than the direct matrix formula of translation followed by rotation and translation.
This technique has currently been applied for the object taken as a triangle, the code can be applied to any object, provided the (Xn, Yn) coordinates are adapted into it.
The base logic of this technique is that in any given reflection, the lateral inversion of the reflected object is at the same distance from any given side as the source object. i.e., if a source object is at a distance of 10 pixels from the left, then the reflected object will be at a distance of 10 pixels from the right and the same is applicable for top and bottom sides.
Example on a real-life basis:
If a person is standing in front of a mirror, the distance between the right hand of the person and the mirror’s right boundary will be the same as the distance between the left hand of the person’s reflection and the left boundary.
For the convenience of displaying the above technique via a program let’s draw the source object at the 2nd graph quadrant, but it can be done from any quadrant with minor changes to the code.
Steps of the aforementioned technique:
Create an object in the 2nd graph quadrant by providing the coordinates.
For reflection along X-axis:Y-axis coordinates will remain the same.Obtain laterally inverted X-axis coordinates distance by calculating the distance between the X coordinate of the source object and its nearest surface along the X-axis.Draw another object using the laterally inverted X coordinates obtained from the above step while keeping the Y coordinate the same.The above steps will generate a mirror image or reflection of the source object.In this scenario, the reflected object will be formed at the 1st quadrant.
Y-axis coordinates will remain the same.
Obtain laterally inverted X-axis coordinates distance by calculating the distance between the X coordinate of the source object and its nearest surface along the X-axis.
Draw another object using the laterally inverted X coordinates obtained from the above step while keeping the Y coordinate the same.
The above steps will generate a mirror image or reflection of the source object.
In this scenario, the reflected object will be formed at the 1st quadrant.
 For reflection along Y-axis:X-axis coordinates will remain the same.Obtain laterally inverted Y-axis coordinates’ distance by calculating the distance between the Y coordinate of the source object and its nearest surface along the Y-axis.    Draw another object using the laterally inverted Y coordinates obtained from the above step while keeping the X coordinate the same.The above steps will generate a mirror image or reflection of the source object.In this scenario, the reflected object will be formed at the 3rd quadrant.
X-axis coordinates will remain the same.
Obtain laterally inverted Y-axis coordinates’ distance by calculating the distance between the Y coordinate of the source object and its nearest surface along the Y-axis.    
Draw another object using the laterally inverted Y coordinates obtained from the above step while keeping the X coordinate the same.
The above steps will generate a mirror image or reflection of the source object.
In this scenario, the reflected object will be formed at the 3rd quadrant.
2c. For reflection along the origin:X-axis and Y-axis coordinates will change.Obtain laterally inverted Y-axis coordinate distance by calculating the distance between the Y coordinate of the source object and its nearest surface along the Y-axis.Obtain laterally inverted X-axis coordinate distance by calculating the distance between the X coordinate of the source object and its nearest surface along the X-axis. Draw another object using the laterally inverted X and Y coordinates obtained from the above steps.The above steps will generate a mirror image or reflection of the source object.This time, the reflection is about origin as both X & Y coordinates have changed, pushing the object inside out.In this scenario, the reflected object will be formed at the 4th quadrant.
X-axis and Y-axis coordinates will change.
Obtain laterally inverted Y-axis coordinate distance by calculating the distance between the Y coordinate of the source object and its nearest surface along the Y-axis.
Obtain laterally inverted X-axis coordinate distance by calculating the distance between the X coordinate of the source object and its nearest surface along the X-axis. 
Draw another object using the laterally inverted X and Y coordinates obtained from the above steps.
The above steps will generate a mirror image or reflection of the source object.
This time, the reflection is about origin as both X & Y coordinates have changed, pushing the object inside out.
In this scenario, the reflected object will be formed at the 4th quadrant.
Approach:
Draw a line in graphics to act as a Y-axis, by passing along 4 values as parameters of the line() function as line(getmaxx()/2, 0, getmaxx()/2, getmaxy()).Draw a line in graphics to act as X-axis by passing along 4 values as parameters of the line() function as line(0, getmaxy()/2, getmaxx(), getmaxy()/2).Draw an object using the line() function with parameters from set variables.Perform reflection and draw the object along origin using Step 3 of the technique and color it red to distinguish it from other objects.Perform reflection and draw the object along the X-axis using Step 1 of the technique and color it cyan to distinguish it from other objects.Perform reflection and draw the object along the Y-axis using Step 2 of the technique and color it green to distinguish it from other objects.
Draw a line in graphics to act as a Y-axis, by passing along 4 values as parameters of the line() function as line(getmaxx()/2, 0, getmaxx()/2, getmaxy()).
Draw a line in graphics to act as X-axis by passing along 4 values as parameters of the line() function as line(0, getmaxy()/2, getmaxx(), getmaxy()/2).
Draw an object using the line() function with parameters from set variables.
Perform reflection and draw the object along origin using Step 3 of the technique and color it red to distinguish it from other objects.
Perform reflection and draw the object along the X-axis using Step 1 of the technique and color it cyan to distinguish it from other objects.
Perform reflection and draw the object along the Y-axis using Step 2 of the technique and color it green to distinguish it from other objects.
Below is the implementation of the above approach:
C
// C program for the above approach  #include <conio.h>#include <graphics.h>#include <stdio.h>  // Driver Codevoid 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();}
Output:
c-graphics
computer-graphics
C Language
C Programs
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
TCP Server-Client implementation in C
Exception Handling in C++
'this' pointer in C++
Multithreading in C
Arrow operator -> in C/C++ with Examples
Strings in C
Arrow operator -> in C/C++ with Examples
Header files in C/C++ and its uses
C Program to read contents of Whole File
Basics of File Handling in C