domingo, 11 de octubre de 2020

Tangram con MiniWin

En el siguiente ejemplo se van a recrear las piezas de un tangram empleando triángulos rectángulos para formarlas.

Esto implica crear una o varias funciones para dibujar los triángulos rectángulos. En este caso se optó por usar cuatro funciones llamadas:

  • tipoA
  • tipoB
  • tipoC
  • tipoD

Estas podrían ser "inline", pero se optó por funciones convencionales, las funciones serían:

  1. /*Trabajando con 4 tipos de triángulos rectángulos*/
  2. void tipoA(int x1, int y1, int ta){
  3. for(int i=0; i<=ta; i++){
  4. linea(x1+ta-i,y1+i,x1+ta,y1+i);
  5. }
  6. }
  7. void tipoB(int x1, int y1, int ta){
  8. for(int i=0; i<=ta; i++){
  9. linea(x1,y1+i,x1+i,y1+i);
  10. }
  11. }
  12. void tipoC(int x1, int y1, int ta){
  13. for(int i=0; i<=ta; i++){
  14. linea(x1+i,y1+i,x1+ta,y1+i);
  15. }
  16. }
  17. void tipoD(int x1, int y1, int ta){
  18. for(int i=0; i<=ta; i++){
  19. linea(x1,y1+i,x1+ta-i,y1+i);
  20. }
  21. }

Donde cada función corresponde a:

Tipo A Tipo B
    *
   **
  ***
 ****
*****
*
**
***
****
*****
Tipo C Tipo D
*****
 ****
  ***
   **
    *
*****
****
***
**
*

El código completo sería:

  1. #include "miniwin.h"
  2. using namespace miniwin;
  3. const int DIM = 200; // Valor medio del ancho
  4. /*Funciones */
  5. void tipoA(int x1, int y1, int ta){
  6. for(int i=0; i<=ta; i++){
  7. linea(x1+ta-i,y1+i,x1+ta,y1+i);
  8. }
  9. }
  10. void tipoB(int x1, int y1, int ta){
  11. for(int i=0; i<=ta; i++){
  12. linea(x1,y1+i,x1+i,y1+i);
  13. }
  14. }
  15. void tipoC(int x1, int y1, int ta){
  16. for(int i=0; i<=ta; i++){
  17. linea(x1+i,y1+i,x1+ta,y1+i);
  18. }
  19. }
  20. void tipoD(int x1, int y1, int ta){
  21. for(int i=0; i<=ta; i++){
  22. linea(x1,y1+i,x1+ta-i,y1+i);
  23. }
  24. }
  25. int main(){
  26. vredimensiona(2*DIM, 2*DIM);
  27. color_rgb(0, 0, 0);
  28. rectangulo_lleno(0, 0, 2*DIM, 2*DIM);
  29. /*Pieza 1*/
  30. color(AZUL);
  31. tipoB(0,0,DIM);
  32. tipoD(0,DIM,DIM);
  33. /*Pieza 2*/
  34. color_rgb(255, 150, 0);
  35. tipoC(0,0,DIM);
  36. tipoD(DIM,0,DIM);
  37. /*Pieza 3*/
  38. color(VERDE);
  39. tipoA(DIM*1.5,0,DIM/2);
  40. rectangulo_lleno(DIM*1.5,DIM/2,2*DIM,DIM);
  41. tipoD(DIM*1.5,DIM,DIM/2);
  42. /*Pieza 4*/
  43. color(ROJO);
  44. tipoA(DIM,DIM,DIM);
  45. /*Pieza 5*/
  46. color(MAGENTA);
  47. tipoA(0,DIM*1.5,DIM/2);
  48. tipoB(DIM/2,DIM*1.5,DIM/2);
  49. /*Pieza 6*/
  50. color(AMARILLO);
  51. tipoA(DIM/2,DIM,DIM/2);
  52. tipoB(DIM,DIM,DIM/2);
  53. tipoC(DIM/2,DIM*1.5,DIM/2);
  54. tipoD(DIM,DIM*1.5,DIM/2);
  55. /*Pieza 7*/
  56. color_rgb(100,0,155);
  57. tipoA(DIM,DIM/2,DIM/2);
  58. tipoC(DIM,DIM,DIM/2);
  59. refresca();
  60. return 0;
  61. }

El resultado visual sería:




No hay comentarios:

Publicar un comentario