thocon_dethuong

New Member
em có cái bài tập lớn môn Kỹ thuật đồ hoạ máy tính như thế này:


Vẽ hình hộp chữ nhật quay quanh trục oz


bac nào có thì cho em xin code.bằng ngôn ngữ nào cũng được.em xin cảm ơn
 

diep_1809

New Member
ve chay thu xem anh hoa day



#include


#include


#include


#include


#include


#include



#define RADS 0.017453293



void veHeToaDo(){


setcolor(BLUE);


int Ox=getmaxx()/2;


int Oy=getmaxy()/2;



//Ox


line(Ox,20,Ox,Oy);



//Oy


line(Ox,Oy,getmaxx()-20,Oy);



//Oz


line(Ox,Oy,Ox-150,Oy+150);



//Goc toa do


setcolor(YELLOW);


circle(Ox,Oy,1);



settextjustify(1,1);



setcolor(WHITE);


outtextxy(Ox,20,"^");


outtextxy(getmaxx()-20,Oy,">");


outtextxy(Ox+10,Oy+10,"O");


outtextxy(Ox+10,20,"Y");


outtextxy(getmaxx()-20,Oy+10,"X");


outtextxy(Ox-150,Oy+150,"<");


outtextxy(Ox-160,Oy+160,"Z");



for(int i=1;i

putpixel(Ox,Oy-10*i,WHITE);


}



for(int j=1;j

putpixel(Ox+10*j,Oy,WHITE);


}



for(int k=1;k<15;k++){


putpixel(Ox-10*k,Oy+10*k,WHITE);


}


}



class Diem{


public:


double x;


double y;


double z;



void diChuyen(int c){


switch(c){


case 75: x-=10; break;


case 77: x+=10; break;


case 72: y+=10; break;


case 80: y-=10; break;


case 42: z-=10; break;


case 47: z+=10; break;


}


}



void quay(int c){


float xo=x, yo=y, zo=z;


float a=0.1;


switch(c){


case 120: //Ox


y=yo*cos(a)-zo*sin(a);


z=yo*sin(a)+zo*cos(a);


break;


case 121: //Oy


x=xo*cos(a)+zo*sin(a);


z=-xo*sin(a)+zo*cos(a);


break;


case 122: //Oz


x=xo*cos(a)-yo*sin(a);


y=xo*sin(a)+yo*cos(a);


break;


}


}



void tyLe(int c){


switch(c){


case 43:


x*=1.5;


y*=1.5;


z*=1.5;


break;


case 45:


x/=1.5;


y/=1.5;


z/=1.5;


break;


}


}



void gan(Diem d){


x=d.x;


y=d.y;


z=d.z;


}


};



Diem chuyenHeToaDo(Diem od){


Diem d;


d.gan(od);



double x=d.x, y=d.y, z=d.z;


d.x=z;


d.y=x;


d.z=y;



Diem p;


if(d.x>=0&&d.y>=0&&d.z>=0){


p.x = getmaxx()/2+d.y - d.x*cos(RADS*45);


p.y = getmaxy()/2-d.z + d.x*cos(RADS*45);


}


if(d.y>=0&&d.x<0&&d.z>=0){


p.x = d.y+getmaxx()/2-d.x*cos(RADS*45);


p.y = getmaxy()/2-d.z+d.x*cos(RADS*45);


}


if(d.x>=0&&d.y<0&&d.z>=0){


p.x = getmaxx()/2+d.y-d.x*cos(RADS*45);


p.y = getmaxy()/2-(d.z-d.x*cos(RADS*45));


}


if(d.x>=0&&d.y>=0&&d.z<0){


p.x = getmaxx()/2+d.y-d.x*cos(RADS*45);


p.y = getmaxy()/2-d.z+d.x*cos(RADS*45);


}


if(d.y>=0&&d.x<0&&d.z<0){


p.x = getmaxx()/2+d.y-d.x*cos(RADS*45);


p.y = getmaxy()/2+(-d.z-d.x*cos(RADS*45));


}


if(d.x>=0&&d.y<0&&d.z<0){


p.x = getmaxx()/2+d.y-d.x*cos(RADS*45);


p.y = getmaxy()/2-d.z+d.x*cos(RADS*45);


}


if(d.z>=0&&d.y<0&&d.x<0){


p.x = getmaxx()/2-(-d.y+d.x*cos(RADS*45));


p.y = getmaxy()/2-(d.z-d.x*cos(RADS*45));


}


if(d.x<0&&d.y<0&&d.z<0){


p.x = getmaxx()/2+d.y-d.x*cos(RADS*45);


p.y = getmaxy()/2-d.z+d.x*cos(RADS*45);


}



return(p);


}



class DoanThang{


public:


Diem dd;


Diem dc;



void ve(){


veHeToaDo();


Diem ddm, dcm;


ddm.gan(chuyenHeToaDo(dd));


dcm.gan(chuyenHeToaDo(dc));


setcolor(RED);


line(ddm.x,ddm.y,dcm.x,dcm.y);


}



void diChuyen(int c){


dd.diChuyen(c);


dc.diChuyen(c);


}



void quay(int c){


dd.quay(c);


dc.quay(c);


}



void tyLe(int c){


dd.tyLe(c);


dc.tyLe(c);


}


};



class TuDien{


public:


Diem A;


Diem B;


Diem C;


Diem D;



void ve(){


veHeToaDo();



DoanThang AB,AC,AD,BC,BD,CD;



AB.dd.gan(A);


AB.dc.gan(B);


setcolor(RED);


AB.ve();



AC.dd.gan(A);


AC.dc.gan(C);


setcolor(RED);


AC.ve();



AD.dd.gan(A);


AD.dc.gan(D);


setcolor(RED);


AD.ve();



BC.dd.gan(B);


BC.dc.gan(C);


setcolor(RED);


BC.ve();



BD.dd.gan(B);


BD.dc.gan(D);


setcolor(RED);


BD.ve();



CD.dd.gan(C);


CD.dc.gan(D);


setcolor(RED);


CD.ve();



}



void diChuyen(int c){


A.diChuyen(c);


B.diChuyen(c);


C.diChuyen(c);


D.diChuyen(c);


}



void tyLe(int c){


A.tyLe(c);


B.tyLe(c);


C.tyLe(c);


D.tyLe(c);


}



void quay(int c){


A.quay(c);


B.quay(c);


C.quay(c);


D.quay(c);


}


};



void chucNangTuDien(){


cout<<"======== CHUONG TRINH DI CHUYEN / TY LE / QUAY TU DIEN (3D) ========";



TuDien h;



cout<<"> Nhap toa do diem A: ";


cout<<"\n x = ";


cin>>h.A.x;


cout<<"\n y = ";


cin>>h.A.y;


cout<<"\n z = ";


cin>>h.A.z;



cout<<"> Nhap toa do diem B: ";


cout<<"\n x = ";


cin>>h.B.x;


cout<<"\n y = ";


cin>>h.B.y;


cout<<"\n z = ";


cin>>h.B.z;



cout<<"\n> Nhap toa do diem C: ";


cout<<"\n x = ";


cin>>h.C.x;


cout<<"\n y = ";


cin>>h.C.y;


cout<<"\n z = ";


cin>>h.C.z;



cout<<"> Nhap toa do diem D: ";


cout<<"\n x = ";


cin>>h.D.x;


cout<<"\n y = ";


cin>>h.D.y;


cout<<"\n z = ";


cin>>h.D.z;



h.ve();



cout<<"\n\n> De thoat ra: an ESC.";



for({


int c=getch();


if(c==27)


break;


h.diChuyen(c);


h.tyLe(c);


h.quay(c);


cleardevice();


h.ve();


}


}



void main(void){


for({


clrscr();



int gdriver, gmode, errorcode;


gdriver = DETECT;


initgraph(&gdriver,&gmode,"D:\\TC\\BGI");


errorcode = graphresult();


if (errorcode !=grOk){


cout<<"\n không the khoi tao!";


getch();


exit(1);


}



int lc=0;



cout<<"======== CHUONG TRINH DI CHUYEN / TY LE / QUAY CAC DOI TUONG ========";


cout<<"\n\n|| 1.> Thao tac voi tu dien. ||";


cout<<"\n|| ||";


cout<<"\n|| 0.> Thoa't. ||";


cout<<"\n|| ||";


cout<<"\n\n Lua chon: ";


cin>>lc;



switch(lc){


case 1:


chucNangTuDien();;


break;


case 0:


exit(1);


}




closegraph();


}


}
 

hong.traitim

New Member
Em có bai tập lớn Đồ họa này anh nào code gửi em với em Thank .

Giả sử rằng một bề mặt chiếu được định nghĩa là mặt xy của hệ tọa độ quy tắc bàn tay trái, cài đặt sự định nghĩa tọa độ của một hình hộp chữ nhật trong hệ tọa độ này để nó nằm phía trước mặt phẳng chiếu. Dùng ma trận biến hướng của khối sao cho thu được phép chiếu phối cảnh một điểm và hai điểm. Viết một chương trình để hiển thị hai quang cảnh phối cảnh này.
 

Các chủ đề có liên quan khác

Top