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...........
Nội dung trích xuất từ tài liệu:
Ngôn ngữ lập trình c&c++ ( Phạm Hồng Thái) P25Chươ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-rChươ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 theotọ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ênphả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ủamà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ànhì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) }200Chươ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; iChương 6. Đồ họa và âm thanh float t; int i, x, y; for (i = 0; iChươ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;iChươ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(do ...