Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.82 KB | None | 0 0
  1. #include <stdio.h> //printf/getch itp.
  2. #include <conio.h> //kbhit()
  3. #include <graphics.h> //funkcje graficzne BGI
  4. #include <windows.h> //Sleep(xx)
  5. #include <math.h>
  6.  
  7. struct p3d
  8. {
  9. double x,y,z;
  10. };
  11. struct p2d
  12. {
  13. double x,y;
  14. };
  15. int main()
  16. {
  17. int GraphDriver = DETECT;
  18. int GraphMode;
  19. int ErrorCode;
  20. initgraph(&GraphDriver, &GraphMode,"");
  21. ErrorCode = graphresult();
  22. if(ErrorCode != grOk)
  23. {
  24. printf("Blad trybu graficznego: %s\n", grapherrormsg(ErrorCode) );
  25. exit(1);
  26. }
  27. //Tutaj kod związany z rysowaniem
  28. //******************************************************************************************************************
  29. double kat;
  30. int i;
  31. kat=1;
  32. p3d sr= {200,200,100};
  33. p3d k3d[8]=
  34. {
  35. {100,100,0},
  36. {100,300,0},
  37. {300,300,0},
  38. {300,100,0},
  39. {100,100,200},
  40. {100,300,200},
  41. {300,300,200},
  42. {300,100,200},
  43. };
  44. double tmpX,tmpY,tmpZ;
  45. double alfa=0;
  46. double beta=0;
  47. double gamma=0;
  48. char z;
  49. double stopien=M_PI/180;
  50. while(z!=27)
  51. {
  52. if(kbhit())
  53. {
  54. z=getch();
  55. if(z=='w')
  56. {
  57. alfa=stopien;
  58. beta=0;
  59. gamma=0;
  60. }
  61. if(z=='s')
  62. {
  63. alfa=0;
  64. beta=stopien;
  65. gamma=0;
  66. }
  67. if(z=='d')
  68. {
  69. alfa=0;
  70. beta=0;
  71. gamma=stopien;
  72. }
  73.  
  74. }
  75. for(i=0; i<8; i++)
  76. {
  77. tmpX=k3d[i].x;
  78. tmpY=k3d[i].y;
  79. tmpZ=k3d[i].z;
  80. k3d[i].x=sr.x+((tmpX-sr.x)*cos(alfa))+((tmpY-sr.y)*sin(alfa));
  81. k3d[i].y=sr.y+((tmpY-sr.y)*cos(alfa))-((tmpX-sr.x)*sin(alfa));
  82. k3d[i].z=tmpZ;
  83. }
  84.  
  85.  
  86. for(i=0; i<8; i++)
  87. {
  88. tmpX=k3d[i].x;
  89. tmpY=k3d[i].y;
  90. tmpZ=k3d[i].z;
  91. k3d[i].x=sr.x+((tmpX-sr.x)*cos(beta))-((tmpZ-sr.z)*sin(beta));
  92. k3d[i].y=tmpY;
  93. k3d[i].z=sr.z+((tmpZ-sr.z)*cos(beta))+((tmpX-sr.x)*sin(beta));
  94. }
  95.  
  96.  
  97. for(i=0; i<8; i++)
  98. {
  99. tmpX=k3d[i].x;
  100. tmpY=k3d[i].y;
  101. tmpZ=k3d[i].z;
  102. k3d[i].x=tmpX;
  103. k3d[i].y=sr.y+((tmpY-sr.y)*cos(gamma))+((tmpZ-sr.z)*sin(gamma));
  104. k3d[i].z=sr.z+((tmpZ-sr.z)*cos(beta))-((tmpY-sr.y)*sin(beta));
  105. }
  106.  
  107. p2d k2d[8];
  108. for(i=0; i<8; i++) // przeszktalcenie punktow 3d na 2d
  109. {
  110. k2d[i].x=k3d[i].x+k3d[i].z/2; // X
  111. k2d[i].y=k3d[i].y-k3d[i].z/3; // Y
  112. }
  113. setcolor(YELLOW);
  114. for(i=0; i<4; i++)
  115. {
  116. line(k2d[i].x,k2d[i].y,k2d[(i+1)%4].x,k2d[(i+1)%4].y); // pierwszy kwadrat
  117. line(k2d[(i+4)].x,k2d[(i+4)].y,k2d[(i+1)%4+4].x,k2d[(i+1)%4+4].y); //drugi kwadrat
  118. line(k2d[i].x,k2d[i].y,k2d[i+4].x,k2d[(i+4)].y); // połączenie kwadratow
  119. }
  120. Sleep(5);
  121. setcolor(BLACK);
  122. for(i=0; i<4; i++)
  123. {
  124. line(k2d[i].x,k2d[i].y,k2d[(i+1)%4].x,k2d[(i+1)%4].y); // pierwszy kwadrat
  125. line(k2d[(i+4)].x,k2d[(i+4)].y,k2d[(i+1)%4+4].x,k2d[(i+1)%4+4].y); //drugi kwadrat
  126. line(k2d[i].x,k2d[i].y,k2d[i+4].x,k2d[(i+4)].y); // połączenie kwadratow
  127. }
  128.  
  129. }
  130.  
  131. //******************************************************************************************************************
  132. //koniec rysowania
  133. //program czeka na naciœniêcie klawisza i ZAMYKA tryb graficzny!
  134. fflush(stdin);
  135. getch(); //tylko zatrzymanie programu, żeby nie zamykał natychmiast okna graficznego
  136. closegraph(); //koniec trybu graficznego
  137.  
  138. return(0);
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement