Bài này mình vừa làm giúp đứa em. Ở đây mình khai báoC Code:
#include "graphics.h" #include "conio.h" #include "dos.h" #include "math.h" #include "stdlib.h" #define r 60 #define d 80 #define rad 3.1412/180 #define Mx getmaxx()/2 #define My getmaxy()/2 int Pl[10]; // tao do cac dinh // ve theo drawpoly thi phai khai bao thua 2 gia tri //neu dung cac dinh thi khi ve lineto(x,y) thi se dai void creat_grap(){ // khoi tao do hoa int mh=DETECT, type; initgraph(&mh,&type,"c:\\tc\\bgi"); return; }//----- eograp void creat_rect(int cl){ // tao hinh chu nhat setcolor(cl); drawpoly(5,Pl); putpixel(Pl[4],Pl[5],random(15)); return; }//-----eorect void DL(){ // tao tre voi delay(); delay(20); return; }//------ eoDL void update(int ap){ //cap nhat lai thong tin toa do Pl[8]=Pl[0];Pl[9]=Pl[1]; } main(){ creat_grap(); //khoi tao do hoa Pl[0]=Mx;Pl[1]=My; moveto(Pl[0],Pl[1]); int i=0; int x,y; randomize(); for(int a=0;a<300;a++){ putpixel(random(getmaxx()),random(getmaxy()),random(15)+1); } while(!kbhit()){ update(i); x=random(getmaxx()); y=random(getmaxy()); creat_rect(6); putpixel(x,y,random(15)+1); DL(); creat_rect(0); putpixel(x,y,0); i++; if(i>360) i=0; } closegraph(); return 0; }//--- eom
Tức là rộng và dài. Cái này chuyển sang cho người nhập vào thì đơn giản.#define r 60
#define d 80
Mình thắc mắc ở chỗ:
Lẽ ra chỗ atan mình để là r/d tức là rộng chia cho dài. Nhưng mọi cái đều =0 cho dù mình đã đổi kiểu dữ liệu sang fload hoặc cái khác đều cho kết quả là 0 nếu để là r/d;Vậy là tại sao?void update(int ap){ //cap nhat lai thong tin toa do
Pl[2]=Mx+int(d*cos(ap*rad));Pl[3]=My+int(d*sin(ap*rad));
Pl[4]=Mx+int(sqrt(d*d+r*r)*cos((ap-180*atan(0.75)/3.1412)*rad));
Pl[5]=My+int(sqrt(d*d+r*r)*sin((ap-180*atan(0.75)/3.1412)*rad));
Pl[6]=Mx+int(r*cos((-90+ap)*rad));Pl[7]=My+int(r*sin((-90+ap)*rad));
Pl[8]=Pl[0];Pl[9]=Pl[1];
}
(chỗ in đậm) mình để 0.75 vì ở trên mình khai báo r =60; d=80(hai số này thỏa mãn để tạo thành một tam giác là a+b>sqrt(a*a+b*b)).
Giúp mình với nhé vì để r/d nó là tổng quát (mang tính động), mấy cái kiểu dữ liệu mình không chắc chắn lắm!
Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.
NT_OnlyLove thay 2 dòng sau:
ThànhCode:#define r 60 #define d 80
Code:#define r 60.0 #define d 80.0
Với hầu hết các compiler, biểu thức bên phải dấu '=' (gán) sẽ được được thực hiện trước. Như vậy phép tính r/d của bạn sẽ được hiểu là phép chia dạng int/int.
Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667
Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.