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 4º cuadrante .
Acercarse:
- 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()) .
- 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) .
- Dibuja un objeto usando la función line() con parámetros de variables establecidas.
- 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.
- 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.
- 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