Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4.  
  5. struct point3d {
  6. float x;
  7. float y;
  8. float z;
  9.  
  10. point3d();
  11. point3d(float,float,float);
  12. };
  13.  
  14. point3d::point3d()
  15. {
  16. this->x = 0;
  17. this->y = 0;
  18. this->z = 0;
  19. }
  20.  
  21. point3d::point3d(float x, float y, float z)
  22. {
  23. this->x = x;
  24. this->y = y;
  25. this->z = z;
  26. }
  27.  
  28. struct macierz
  29. {
  30. point3d pocz, kon;
  31. bool czybryla;
  32.  
  33. macierz *next;
  34. macierz();
  35. };
  36.  
  37. macierz::macierz()
  38. {
  39. this->next=NULL;
  40. }
  41.  
  42. class cube
  43. {
  44. public:
  45. macierz *head;
  46.  
  47. void poczatek();
  48. void podzial();
  49. void dodaj(point3d pocz, point3d kon);
  50. void sprawdzenie(float x,float y, float z, float xk,float yk, float zk);
  51. int czy_przedzial(float a, float b, float c);
  52. void deleteNode(macierz *head,macierz *n);
  53. void usuwanie();
  54. void lista();
  55. bool program();
  56. };
  57.  
  58. void cube::poczatek()
  59. {
  60. macierz *nowa = new macierz;
  61.  
  62. nowa -> pocz.x = 0;
  63. nowa -> pocz.y = 0;
  64. nowa -> pocz.z = 0;
  65. nowa -> kon.x = 32;
  66. nowa -> kon.y = 32;
  67. nowa -> kon.z = 32;
  68.  
  69. head = nowa;
  70. }
  71.  
  72. void cube::dodaj(point3d pocz, point3d kon)
  73. {
  74. macierz *nowa, *glowa;
  75.  
  76. nowa = new macierz;
  77.  
  78. nowa -> next = NULL;
  79. nowa -> pocz.x = pocz.x;
  80. nowa -> pocz.y = pocz.y;
  81. nowa -> pocz.z = pocz.z;
  82. nowa -> kon.x = kon.x;
  83. nowa -> kon.y = kon.y;
  84. nowa -> kon.z = kon.z;
  85. glowa = head;
  86. //cout<<"("<<nowa->pocz.x<<","<<nowa->pocz.y<<","<<nowa->pocz.z<<") ("<<nowa->kon.x<<","<<nowa->kon.y<<","<<nowa->kon.z<<")"<<nowa->czybryla<<endl;
  87.  
  88. if(glowa)
  89. {
  90. while(glowa->next)
  91. {
  92. glowa = glowa->next;
  93. }
  94. glowa->next = nowa;
  95. }
  96. }
  97.  
  98. void cube::podzial()
  99. {
  100. float xpocztym = head->pocz.x, ypocztym = head->pocz.x,zpocztym = head->pocz.z, ykontym = head->kon.y, zkontym = head->kon.z,xkontym = head->kon.x;
  101.  
  102. head -> pocz.x = xpocztym/2;
  103. head -> pocz.y = ypocztym/2;
  104. head -> pocz.z = zpocztym/2;
  105. head -> kon.x = xkontym/2;
  106. head -> kon.y = ykontym/2;
  107. head -> kon.z = zkontym/2;
  108.  
  109. point3d temp_pocz, temp_kon;
  110.  
  111. for(int i=1;i<8;i++)
  112. {
  113. switch(i)
  114. {
  115. case 1:
  116. //cout<<i<<" ";
  117. dodaj(point3d(head->kon.x,head->pocz.y,head->pocz.z), point3d(xkontym,head -> kon.y,head -> kon.z));
  118. break;
  119. case 2:
  120. //cout<<i<<" ";
  121. dodaj(point3d(head -> pocz.x,head->pocz.y,head -> kon.z),point3d(head -> kon.x,head -> kon.y,(head -> kon.z)*2));
  122. break;
  123. case 3:
  124. //cout<<i<<" ";
  125. dodaj(point3d(head -> kon.x,head->pocz.y,head -> kon.z),point3d((head -> kon.x)*2,head -> kon.y,(head -> kon.z)*2));
  126. break;
  127. case 4:
  128. //cout<<i<<" ";
  129. dodaj(point3d(head -> pocz.x,head -> kon.y,head -> pocz.z),point3d(head -> kon.x,(head -> kon.y)*2,head -> kon.z));
  130. break;
  131. case 5:
  132. //cout<<i<<" ";
  133. dodaj(point3d(head -> kon.x,head -> kon.y,head -> pocz.z),point3d((head -> kon.x)*2,(head -> kon.y)*2,head -> kon.z));
  134. break;
  135. case 6:
  136. //cout<<i<<" ";
  137. dodaj(point3d(head -> pocz.x,head -> kon.y,head -> kon.z),point3d(head -> kon.x,(head -> kon.y)*2,(head -> kon.y)*2));
  138. break;
  139. case 7:
  140. //cout<<i<<" ";
  141. dodaj(point3d(head -> kon.x,head -> kon.y,head -> kon.z),point3d((head -> kon.x)*2,(head -> kon.y)*2,(head -> kon.z)*2));
  142. break;
  143. }
  144. }
  145. }
  146.  
  147. int cube::czy_przedzial(float a,float b,float c)
  148. {
  149. if(a<=c&&b>=c)
  150. return 1;
  151. else
  152. return 0;
  153. }
  154.  
  155. void cube::sprawdzenie(float x,float y, float z, float xk,float yk, float zk)
  156. {
  157. macierz *temp = head;
  158. while(temp)
  159. {
  160. if((czy_przedzial(temp->pocz.x,temp->kon.x,x) && (czy_przedzial(temp->pocz.y,temp->kon.y,y)) && (czy_przedzial(temp->pocz.z,temp->kon.z,z)))||(czy_przedzial(temp->pocz.x,temp->kon.x,xk) && (czy_przedzial(temp->pocz.y,temp->kon.y,y)) && (czy_przedzial(temp->pocz.z,temp->kon.z,z)))||(czy_przedzial(temp->pocz.x,temp->kon.x,x) && (czy_przedzial(temp->pocz.y,temp->kon.y,yk)) && (czy_przedzial(temp->pocz.z,temp->kon.z,z)))||(czy_przedzial(temp->pocz.x,temp->kon.x,x) && (czy_przedzial(temp->pocz.y,temp->kon.y,y)) && (czy_przedzial(temp->pocz.z,temp->kon.z,zk)))||(czy_przedzial(temp->pocz.x,temp->kon.x,xk) && (czy_przedzial(temp->pocz.y,temp->kon.y,yk)) && (czy_przedzial(temp->pocz.z,temp->kon.z,z)))||(czy_przedzial(temp->pocz.x,temp->kon.x,xk) && (czy_przedzial(temp->pocz.y,temp->kon.y,y)) && (czy_przedzial(temp->pocz.z,temp->kon.z,zk)))||(czy_przedzial(temp->pocz.x,temp->kon.x,x) && (czy_przedzial(temp->pocz.y,temp->kon.y,yk)) && (czy_przedzial(temp->pocz.z,temp->kon.z,zk)))||(czy_przedzial(temp->pocz.x,temp->kon.x,xk) && (czy_przedzial(temp->pocz.y,temp->kon.y,yk)) && (czy_przedzial(temp->pocz.z,temp->kon.z,zk))))
  161. {
  162. temp->czybryla = 1;
  163. }
  164. else
  165. temp->czybryla = 0;
  166.  
  167. //cout<<"("<<temp->pocz.x<<","<<temp->pocz.y<<","<<temp->pocz.z<<") ("<<temp->kon.x<<","<<temp->kon.y<<","<<temp->kon.z<<")"<<temp->czybryla<<endl;
  168. temp = temp -> next;
  169. }
  170. }
  171. void cube::deleteNode(macierz *head,macierz *n)
  172. {
  173. macierz *prev = head;
  174. while(prev->next != NULL && prev->next != n)
  175. {
  176. prev = prev->next;
  177. }
  178. prev->next = prev->next->next;
  179. free(n);
  180. }
  181.  
  182. void cube::usuwanie() //nie dzia³a, po wielu próbach, doszed³em do wniosku, ze nie potrafie tego naprawic
  183. {
  184. macierz *temp = head;
  185. while(temp)
  186. {
  187. if(temp->czybryla==0)
  188. {
  189. if(temp==head)
  190. {
  191. head = temp->next;
  192. delete temp;
  193. }
  194. else
  195. {
  196. macierz *nwm = temp;
  197. do
  198. {
  199. nwm = nwm->next;
  200.  
  201. }while(nwm->czybryla==0);
  202. temp->next = nwm;
  203. /*macierz *tmp2 = head;
  204. if(tmp2->czybryla==0)
  205. {
  206. do
  207. {
  208. deleteNode(head,tmp2);
  209. }while()*/
  210. }
  211. }
  212. temp = temp->next;
  213. }
  214. }
  215.  
  216. void cube::lista()
  217. {
  218. macierz *temp = head;
  219. while(temp)
  220. {
  221. cout<<"("<<temp->pocz.x<<","<<temp->pocz.y<<","<<temp->pocz.z<<") ("<<temp->kon.x<<","<<temp->kon.y<<","<<temp->kon.z<<")"<<temp->czybryla<<endl;
  222. temp = temp -> next;
  223. }
  224. //Sleep(5000);
  225. }
  226.  
  227. bool cube::program()
  228. {
  229. macierz *temp = head;
  230. while(temp)
  231. {
  232. if((abs(temp->pocz.x-temp->kon.x)!=1)&&(abs(temp->pocz.y-temp->kon.y)!=1)&&(abs(temp->pocz.z-temp->kon.z)!=1))
  233. {
  234. return true;
  235. }
  236. else
  237. temp = temp -> next;
  238. }
  239. return false;
  240. }
  241.  
  242. int main()
  243. {
  244. cube kostka;
  245. kostka.poczatek();
  246. //kostka.lista();
  247. while(kostka.program())
  248. {
  249. kostka.podzial();
  250. kostka.sprawdzenie(8,2,2,24,14,14);
  251. kostka.usuwanie();
  252. kostka.lista();
  253. }
  254. return 0;
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement