Ngôn ngữ lập trình c&c++ ( Phạm Hồng Thái) P25

Chia sẻ: Yukogaru | Ngày: | Loại File: PDF | Số trang:13

0
39
lượt xem
7
download

Ngôn ngữ lập trình c&c++ ( Phạm Hồng Thái) P25

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 6. Đồ họa và âm thanh Để vẽ đồ thị của một hàm toán học, ta vẽ từng điểm một của đồ thị. Mỗi điểm được xác định bởi cặp tọa độ (x, y) trên màn hình. Do vậy cần tính các điểm...........

Chủ đề:
Lưu

Nội dung Text: Ngôn ngữ lập trình c&c++ ( Phạm Hồng Thái) P25

  1. Chương 6. Đồ họa và âm thanh phi = phi + pi/3; // lệch nhau 600 } setcolor(WHITE); } void xoay() { int i, x, y, r; static float phi = 0; x = midx; y = midy; r = 100; while (!kbhit()) { bx(x, y, r, phi, 0); // vẽ bánh xe delay(100); // tạm dừng bx(x, y, r, phi, 1); // xóa bánh xe phi = phi-pi/72; // xoay đi một góc phi } } Ví dụ 8 : Vẽ bánh xe lăn trên đường nằm ngang void lan() { int i, x, y, r; float phi=0; x = 0; y = maxy-110; r = 60; setlinestyle(SOLID_LINE, 1, 3); line(0, maxy-50, maxx, maxy-50); setlinestyle(SOLID_LINE, 1, 1); while (x-r
  2. Chương 6. Đồ họa và âm thanh } 6. Vẽ đồ thị của các hàm toán học Để vẽ đồ thị của một hàm toán học, ta vẽ từng điểm một của đồ thị. Mỗi điểm được xác định bởi cặp tọa độ (x, y) trên màn hình. Do vậy cần tính các điểm này theo tọa độ trên màn hình. Các bước cần làm gồm có: • Xác định hệ trục tọa độ. Thông thường ta sẽ lấy tâm màn hình làm tâm hệ trục bằng việc xác định lại cửa sổ màn hình bởi câu lệnh: viewport(midx, midy, maxx, maxy, 0); trong đó midx, midy là tọa độ tâm màn hình, maxx, maxy là tọa độ góc dưới bên phải của màn hình. Câu lệnh trên tạo một cửa sổ là phần tư bên phải, phía dưới của màn hình. Tham trị cuối (1) cho phép các hình vẽ sẽ được vẽ ra ngoài khung cửa sổ này. Như vậy tâm màn hình sẽ biến thành tâm của hệ trục tọa độ. Tọa độ của tâm màn hình bây giờ được tính là (0,0). • Xác định tỉ lệ: Cần xác định một đơn vị của x và y của hàm cần vẽ sẽ tương ứng với bao nhiêu điểm trên trục x và y của màn hình. Do số điểm theo chiều rộng và chiều cao của màn hình khác nhau và do giá trị của hàm (y) có thể rất lớn so với giá trị của đối (x) (ví dụ hàm y = x4) hoặc rất bé (ví dụ hàm y = sinx) nên các tỉ lệ này theo x và y có thể khác nhau để hình vẽ trên màn hình được cân đối. Việc xác định các tỉ lệ này phụ thuộc vào kinh nghiệm và thường được điều chỉnh sau khi chạy thử chương trình. • Vẽ hệ trục : Có thể vẽ hệ trục tọa độ hay không. Hàm sau cho phép vẽ các trục tọa độ với tâm nằm giữa màn hình. void vetruc() // Ve truc toa do { line(0, midy, maxx, midy); // truc hoanh line(maxx-7, midy-3, maxx, midy); // mui ten line(maxx-7, midy+3, maxx, midy); line(midx, 0, midx, maxy); // truc tung line(midx-3, 7, midx, 0); // mui ten line(midx+3, 7, midx, 0); outtextxy(midx+6, midy+6, "(0, 0)"); // in toa do (0,0) } 200
  3. Chương 6. Đồ họa và âm thanh Các ví dụ sau sẽ vẽ đồ thị của một số hàm quen thuộc. void Sinx() // Do thi ham Sinx { int tileX = 20, tileY = 60; // Tỉ lệ theo X và Y int x, y, i; setviewport(midx, midy, maxx, maxy, 0); for (i = -400; i
  4. Chương 6. Đồ họa và âm thanh float t; int i, x, y; for (i = 0; i
  5. Chương 6. Đồ họa và âm thanh Ve do thi theo toa do cuc r = ϕ(θ) void Archimede() // Ham r = θ, θ ∈ [0, 40] { int i, x, y; float r, t; for (i = 0;i
  6. Chương 6. Đồ họa và âm thanh }; TOADO gr3 = { 320, 20, 20, 20, 20, 0.8*pi, 0.2*pi }; void Vetruc() // Ve truc Ox, Oy { setviewport(0, 0, maxx, maxy, 0); settextstyle(DEFAULT_FONT, HORIZ_HUONG, 0); setcolor(WHITE); line(0, midy, maxx, midy); line(maxx-7, midy-3, maxx, midy); line(maxx-7, midy+3, maxx, midy); line(midx, 0, midx, maxy); line(midx-3, 7, midx, 0); line(midx+3, 7, midx, 0); outtextxy(midx+6, midy+6, "(0, 0)"); outtextxy(maxx-18, midy+6, "x"); outtextxy(midx+8, 6, "y"); setbkcolor(CYAN); setcolor(RED); settextstyle(TRIPLEX_FONT, HORIZ_HUONG, 2); outtextxy(10, 0, "DO THI KHONG GIAN 3 CHIEU"); } int X(double x, double y, double z) // doi toa do xyz sang truc X { return gr3.OX + x*gr3.UX*cos(gr3.Xx) + y*gr3.UY*cos(gr3.Xy); } int Y(double x, double y, double z) // doi toa do xyz sang truc Y { return gr3.OY + x*gr3.UX*sin(gr3.Xx) + y*gr3.UY*sin(gr3.Xy) − z*gr3.UZ; } double f(double x, double y) // Ham f(x, y) can ve { return 4*sin(x)*sin(y); } 204
  7. Chương 6. Đồ họa và âm thanh double g(double x, double y) // Ham g(x, y) can ve { return 5*sin(sqrt(x*x+y*y))/sqrt(x*x+y*y); } void Vehamf() { double x, y, z; double xa = -6.28, xb = 6.28; double ya = -6.28, yb = 6.28; double xp = 0.2, yp = 0.2; int mat[8]; settextstyle(TRIPLEX_FONT, HORIZ_HUONG, 1); outtextxy(10, 20, "Ham z = sinx.siny"); setviewport(0, midy, maxx, maxy, 0); for (x = xa; x
  8. Chương 6. Đồ họa và âm thanh } getch(); } void Vehamg() { double x, y, z; double xa = -10, xb = 10; double ya = -10, yb = 10; double xp = 0.1, yp = 0.1; settextstyle(TRIPLEX_FONT, HORIZ_DIR, 1); outtextxy(10, 20, "Ham z = sin(sqrt(x*x+y*y))"); outtextxy(100, 30, "------------"); outtextxy(115, 40, "sqrt(x*x+y*y)"); setviewport(0, midy, maxx, maxy, 0); setcolor(BLUE); for (x = xa; x
  9. Chương 6. Đồ họa và âm thanh II. ÂM THANH Âm thanh được đặc trưng bởi cao độ (tần số) và trường độ (độ dài). Việc tạo ra một chuỗi âm (bài hát chẳng hạn), là sự kết hợp lặp đi lặp lại của các hàm sau với các tham số n và t được chọn thích hợp. − sound(n): phát âm ra loa máy tính với tần số n. − delay(t): kéo dài trong t miligiây. − nosound(): tắt âm thanh đã phát. Ví dụ 1 : Tiếng còi báo động void coi(int cao; int thap) { do { sound(cao); delay(400); sound(thap); delay(400); } while (!kbhit()) nosound(); } Ví dụ 2 : Tiếng bóng nảy void bong(int cao; int thap) { int sodem = 20; while (sodem > 1) { sound(thap-2*sodem); delay(sodem*500/20); nosound(); delay(100); sound(cao); delay(sodem*500/15); nosound(); delay(150); sodem --; } } 207
  10. Chương 6. Đồ họa và âm thanh Ví dụ 3 : Tiếng bom void bong(int cao; int thap; int t) { int sodem = thap; while (sodem
  11. Chương 6. Đồ họa và âm thanh #define fad1 91 #define sol1 96 #define sold1 102 #define la1 108 #define lad1 115 #define si1 122 #define do2 130 #define dod2 139 #define re2 148 #define re2 148 #define red2 156 #define mi2 164 #define fa2 176 #define fad2 188 #define sol2 196 #define sold2 209 #define la2 230 #define lad2 233 #define si2 247 #define do3 264 #define dod3 281 #define re3 297 #define red3 313 #define mi3 330 #define fa3 352 #define fad3 374 #define sol3 396 #define sold3 415 #define la3 440 #define lad3 468 #define si3 495 #define do4 528 #define dod4 565 #define re4 594 #define red4 625 #define mi4 660 #define fa4 704 #define fad4 748 #define sol4 792 #define sold4 836 #define la4 880 #define lad4 935 #define si4 990 #define lang 30000 void not(unsigned caodo, float truongdo) { sound(caodo); delay(truongdo); nosound(); } void main() { int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi"); int star[20] = {320, 150, 285, 225, 200, 225, 270, 270, 240, 350, 320, 300, 390, 350, 360, 270, 430, 225, 345, 225}; setbkcolor(RED); setcolor(YELLOW); // Vẽ lá cờ đỏ sao vàng setfillstyle(SOLID_FILL, YELLOW); fillpoly(10, star); // Trường độ các nốt nhạc float d = 300; // đen float tr = 2*d; // trắng 209
  12. Chương 6. Đồ họa và âm thanh float tro = 4*d; // tròn float md = d/2; // móc đen float mk = d/4; // móc kép float m3 = d/8; // móc 3 float m4 = d/16; // móc 4 float dc = 3*d/2; // đen chấm float trc = 3*d; // trắng chấm float troc = 6*d; // tròn chấm // Choi bai TQC not(re2, d); not(mi2, d); not(re2, d); not(sol2, tr); not(sol2, tro); not(la2, d); not(sol2, d); not(si2, tr); not(si2, tro); not(la2, d); not(sol2, d); not(mi2, tr); not(sol2, tr); not(sol2, d); not(mi2, tro); not(re2, d); not(si2, d); not(re2, tro); not(sol2, d); not(la2, d); not(si2, tr); not(si2, tr); not(si2, tr); not(la2, d); not(sol2, d); not(re3, tro); not(si2, d); not(sol2, d); not(la2, tr); not(la2, tr); not(si2, tr); not(fad2, d); not(re2, d); not(sol2, tro); not(si2, d); not(do3, d); not(re3, tr); not(re3, tr); not(mi3, tro); not(re3, d); not(si2, tro); not(si2, tr); not(la2, d); not(sol2, tr); not(re2, tr); not(fad2, tr); not(fad2, d); not(la2, d); not(sol2, tr); not(si2, d); not(do3, d); not(re3, tr); not(re3, tr); not(mi3, tro); not(re3, d); not(si2, tro); not(si2, tr); not(la2, d); not(sol2, tr); not(sol2, tr); not(re2, tro); not(re3, tro); not(si2, tr); not(sol2, tr); not(mi3, tro); not(re3, tr); not(si2, d); not(la2, d); not(re2, d); not(la2, tr); not(la2, tro); not(si2, tr); not(sol2, tro); closegraph(); } 210
  13. Chương 6. Đồ họa và âm thanh BÀI TẬP 1. Vẽ hai hình chữ nhật, lần lượt cho mất từng hình, rồi hiện lại cả hai. 2. Biểu diễn dãy 5 giá trị (được nhập từ bàn phím) bằng biểu đồ bar. 3. Biểu diễn dãy 5 giá trị (được nhập từ bàn phím) bằng biểu đồ hình quạt. 4. Vẽ một bàn cờ quốc tế với các ô đen trắng. 5. Viết chương trình vẽ đồ thị hàm số y = 100*sin(x/4.8) trong khoảng x ∈ [0, 60] với giá trị mỗi bước Δx = 0,1. Yêu cầu : − nền màn hình mầu đen. − trục tọa độ màu xanh lá cây − đồ thị màu trắng. 6. Viết chương trình vẽ tam giác với các tọa độ đỉnh lần lượt là A(300, 20), B(100, 220), C(500, 220) và đường tròn ngoại tiếp của nó. Yêu cầu : − nền màn hình mầu đen. − các cạnh tam giác màu xanh lá cây − đường tròn ngoại tiếp màu đỏ tươi. 7. Viết chương trình vẽ hình chữ nhật có tọa độ đỉnh góc trên bên trái là (100,150), chiều ngang 120, chiều dọc 90 và đường tròn ngoại tiếp nó. Yêu cầu : − nền màn hình mầu đen. − các cạnh hình chữ nhật màu xanh da trời. − đường tròn ngoại tiếp màu đỏ tươi. 8. Vẽ tam giác nội tiếp trong hình tròn, hình tròn nội tiếp trong elip. Tô các màu khác nhau cho các miền tạo bởi các đường trên. 9. Vẽ một đài phát sóng. Các vòng sóng phát từ đỉnh của tháp ở tâm màn hình lan tỏa ra chung quanh. Quá trình lặp đến khi ấn phím bất kỳ thì dừng. 10. Vẽ hai hình người đi vào từ 2 phía màn hình với tốc độ khác nhau. Gặp nhau hai hình người xoay lại và đi ngược về 2 phía màn hình. Chương trình dừng khi cả hai đã đi khuất vào hai phía của màn hình. 211
Đồng bộ tài khoản