Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <windows.h>
- using namespace std;
- struct point3d {
- float x;
- float y;
- float z;
- point3d();
- point3d(float,float,float);
- };
- point3d::point3d()
- {
- this->x = 0;
- this->y = 0;
- this->z = 0;
- }
- point3d::point3d(float x, float y, float z)
- {
- this->x = x;
- this->y = y;
- this->z = z;
- }
- struct macierz
- {
- point3d pocz, kon;
- bool czybryla;
- macierz *next;
- macierz();
- };
- macierz::macierz()
- {
- this->next=NULL;
- }
- class cube
- {
- public:
- macierz *head;
- void poczatek();
- void podzial();
- void dodaj(point3d pocz, point3d kon);
- void sprawdzenie(float x,float y, float z, float xk,float yk, float zk);
- int czy_przedzial(float a, float b, float c);
- void deleteNode(macierz *head,macierz *n);
- void usuwanie();
- void lista();
- bool program();
- };
- void cube::poczatek()
- {
- macierz *nowa = new macierz;
- nowa -> pocz.x = 0;
- nowa -> pocz.y = 0;
- nowa -> pocz.z = 0;
- nowa -> kon.x = 32;
- nowa -> kon.y = 32;
- nowa -> kon.z = 32;
- head = nowa;
- }
- void cube::dodaj(point3d pocz, point3d kon)
- {
- macierz *nowa, *glowa;
- nowa = new macierz;
- nowa -> next = NULL;
- nowa -> pocz.x = pocz.x;
- nowa -> pocz.y = pocz.y;
- nowa -> pocz.z = pocz.z;
- nowa -> kon.x = kon.x;
- nowa -> kon.y = kon.y;
- nowa -> kon.z = kon.z;
- glowa = head;
- //cout<<"("<<nowa->pocz.x<<","<<nowa->pocz.y<<","<<nowa->pocz.z<<") ("<<nowa->kon.x<<","<<nowa->kon.y<<","<<nowa->kon.z<<")"<<nowa->czybryla<<endl;
- if(glowa)
- {
- while(glowa->next)
- {
- glowa = glowa->next;
- }
- glowa->next = nowa;
- }
- }
- void cube::podzial()
- {
- 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;
- head -> pocz.x = xpocztym/2;
- head -> pocz.y = ypocztym/2;
- head -> pocz.z = zpocztym/2;
- head -> kon.x = xkontym/2;
- head -> kon.y = ykontym/2;
- head -> kon.z = zkontym/2;
- point3d temp_pocz, temp_kon;
- for(int i=1;i<8;i++)
- {
- switch(i)
- {
- case 1:
- //cout<<i<<" ";
- dodaj(point3d(head->kon.x,head->pocz.y,head->pocz.z), point3d(xkontym,head -> kon.y,head -> kon.z));
- break;
- case 2:
- //cout<<i<<" ";
- dodaj(point3d(head -> pocz.x,head->pocz.y,head -> kon.z),point3d(head -> kon.x,head -> kon.y,(head -> kon.z)*2));
- break;
- case 3:
- //cout<<i<<" ";
- dodaj(point3d(head -> kon.x,head->pocz.y,head -> kon.z),point3d((head -> kon.x)*2,head -> kon.y,(head -> kon.z)*2));
- break;
- case 4:
- //cout<<i<<" ";
- dodaj(point3d(head -> pocz.x,head -> kon.y,head -> pocz.z),point3d(head -> kon.x,(head -> kon.y)*2,head -> kon.z));
- break;
- case 5:
- //cout<<i<<" ";
- dodaj(point3d(head -> kon.x,head -> kon.y,head -> pocz.z),point3d((head -> kon.x)*2,(head -> kon.y)*2,head -> kon.z));
- break;
- case 6:
- //cout<<i<<" ";
- dodaj(point3d(head -> pocz.x,head -> kon.y,head -> kon.z),point3d(head -> kon.x,(head -> kon.y)*2,(head -> kon.y)*2));
- break;
- case 7:
- //cout<<i<<" ";
- dodaj(point3d(head -> kon.x,head -> kon.y,head -> kon.z),point3d((head -> kon.x)*2,(head -> kon.y)*2,(head -> kon.z)*2));
- break;
- }
- }
- }
- int cube::czy_przedzial(float a,float b,float c)
- {
- if(a<=c&&b>=c)
- return 1;
- else
- return 0;
- }
- void cube::sprawdzenie(float x,float y, float z, float xk,float yk, float zk)
- {
- macierz *temp = head;
- while(temp)
- {
- 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))))
- {
- temp->czybryla = 1;
- }
- else
- temp->czybryla = 0;
- //cout<<"("<<temp->pocz.x<<","<<temp->pocz.y<<","<<temp->pocz.z<<") ("<<temp->kon.x<<","<<temp->kon.y<<","<<temp->kon.z<<")"<<temp->czybryla<<endl;
- temp = temp -> next;
- }
- }
- void cube::deleteNode(macierz *head,macierz *n)
- {
- macierz *prev = head;
- while(prev->next != NULL && prev->next != n)
- {
- prev = prev->next;
- }
- prev->next = prev->next->next;
- free(n);
- }
- void cube::usuwanie() //nie dzia³a, po wielu próbach, doszed³em do wniosku, ze nie potrafie tego naprawic
- {
- macierz *temp = head;
- while(temp)
- {
- if(temp->czybryla==0)
- {
- if(temp==head)
- {
- head = temp->next;
- delete temp;
- }
- else
- {
- macierz *nwm = temp;
- do
- {
- nwm = nwm->next;
- }while(nwm->czybryla==0);
- temp->next = nwm;
- /*macierz *tmp2 = head;
- if(tmp2->czybryla==0)
- {
- do
- {
- deleteNode(head,tmp2);
- }while()*/
- }
- }
- temp = temp->next;
- }
- }
- void cube::lista()
- {
- macierz *temp = head;
- while(temp)
- {
- cout<<"("<<temp->pocz.x<<","<<temp->pocz.y<<","<<temp->pocz.z<<") ("<<temp->kon.x<<","<<temp->kon.y<<","<<temp->kon.z<<")"<<temp->czybryla<<endl;
- temp = temp -> next;
- }
- //Sleep(5000);
- }
- bool cube::program()
- {
- macierz *temp = head;
- while(temp)
- {
- 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))
- {
- return true;
- }
- else
- temp = temp -> next;
- }
- return false;
- }
- int main()
- {
- cube kostka;
- kostka.poczatek();
- //kostka.lista();
- while(kostka.program())
- {
- kostka.podzial();
- kostka.sprawdzenie(8,2,2,24,14,14);
- kostka.usuwanie();
- kostka.lista();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement