ĐỒ HỌA HAI CHIỀU VÀ PHÁT TRIỂN ỨNG DỤNG MÔ PHỎNG BẮN PHÁO HOA LÊN BẦU TRỜI ĐÊM

18 4 0
ĐỒ HỌA HAI CHIỀU VÀ PHÁT TRIỂN ỨNG DỤNG MÔ PHỎNG BẮN PHÁO HOA LÊN BẦU TRỜI ĐÊM

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN ĐỒ HỌA MÁY TÍNH ĐỀ TÀI: ĐỒ HỌA HAI CHIỀU VÀ PHÁT TRIỂN ỨNG DỤNG MÔ PHỎNG BẮN PHÁO HOA LÊN BẦU TRỜI ĐÊM Sinh viên thực : NINH NGỌC TUẤN TẠ QUỐC TRẦN VŨ PHI LONG Giảng viên hướng dẫn : NGÔ TRƯỜNG GIANG Ngành : CÔNG NGHỆ THÔNG TIN Chuyên ngành : CƠNG NGHỆ PHẦN MỀM Lớp : D13CNPM1 Khóa : 2018-2023 Hà Nội, tháng năm 2020 Giảng viên hướng dẫn (Ký, Ghi rõ họ tên) Sinh viên thực (Ký, Ghi rõ họ tên) I Đồ họa hai chiều 1.1 Vẽ đường thẳng 1.1.1 Thuật toán Bressenham vẽ đường thẳng  Thuật toán Điểm vừa chọn (x, y) => điểm vẽ (x+1, y) hay (x+1, y+1) Việc lựa chọn phụ thuộc vào khoảng cách d: d = d1-d2 • Nếu d >  d1 > d2 chọn NE (xi+1, yi) • Nếu d = d(xi + 1,yi + 1) = -2a(xi + 1) + 2yi - 2b + + - 2a = d + - 2a = d + • Nếu chọn NE => = d(xi+1, yi) = -2a(xi + 1) + 2yi - 2b + - 2a = d - 2a = d + • Tìm dstart o Giả sử điểm khởi đầu xi,yi = -2a(xi + 1) + 2yi - 2b + Mà ta có yi = axi + b => axi = yi - b = -2a + o Ta có a = Nhân vế với dx ta có: = -2dy + dx = -2dy+2dx = -2dy • Chọn vị trí vẽ x1,y1 • Tính tham số thứ d = -2dy+dx o Nếu d > vị trí vẽ xi + 1, yi o Ngược lại vị trí vẽ xi + 1, yi + • Tiếp tục tăng x để tính d từ d trước o Nếu trước di > di + = di - 2dy o Ngược lại di + = di - 2dy + 2dx o Nếu di + vị trí vẽ xi + 2, yi o Ngược lại vị trí vẽ xi + 2, yi + • Lặp lại bước x = x2  Lưu đồ thuật giải -  Kết Code - Chạy chương trình 1.1.2 Thuật tốn Midpoint vẽ đường thẳng  Giới thiệu Trong toán học, bạn biết qua khái niệm đường thẳng Nó đường kéo dài, vơ mỏng, thẳng tuyệt đối qua hai điểm có đường thẳng qua Tuy nhiên, hình máy tính lại bao gồm nhiều điểm ảnh với kích thước cụ thể khác Vì vậy, khái niệm đường thẳng lại tập hợp điểm có kích thước xấp xỉ gần với điểm thực tế Để thu đường thẳng tốt ta cần lựa chọn điểm ảnh gần với đường thẳng thực tế Do đó, thuật tốn vẽ đường thẳng đời nhằm giải toán Để vẽ đường thẳng nối từ hai điểm (x1, y1), (x2, y2), ta cần tính tốn điểm vẽ sau vẽ điểm (x1, y1) Với thuật toán Midpoint, ta tìm điểm cần tìm dựa vào vị trí trung điểm đối tượng nằm vùng lựa chọn so với đường thẳng vẽ  Thuật toán Đối với việc lựa chọn điểm vẽ sau A, ta có hai lựa chọn điểm P Q với M trung điểm chúng Việc định chọn điểm để vẽ phụ thuộc vào vị trí M so với đường thẳng vẽ Nếu M nằm phía đường thẳng, ta chọn điểm Q Ngược lại, M nằm phía đường thẳng ta chọn điểm P • • • • Ta có phương trình đường thẳng: F(x,y) = ax + by + c y =.x + B F(x, y) = x + B – y = F(x, y) = dy.x – dx.y + B.dx = a = dy , b = -dx, c= B.dx Giá trị hàm M: F(M) = F(xi + 1, yi + 1/2) = d o Nếu d > 0, M nằm đường thẳng => chọn Q o Nếu d < 0, M nằm đường thẳng => chọn P o Nếu d = 0, chọn P hay Q tùy ý Giá trị hàm M điểm vẽ: o Gọi giá trị d vừa tính là: =a( o Giả sử vừa chọn P: = F.( )=a( +c o Giả sử vừa chọn Q: = F ( • )=a( ) + b () + c dy – dx số gia điểm Tính giá trị khởi đầu d o Giả sử vẽ đoạn thẳng từ (x0, y0) đến (x1, y1) => trung điểm thứ có tọa độ (x0 + 1, y0 + ) F (xi + 1, yi + ) = a (xi + ) + b (yi + ) + c = a.x0 + b.x0 + c + a + = • F(x0,y0) = => o Tránh số thập phân định nghĩa lại hàm sau: F(x,y) = 2(ax + by + c) o Do ta có:  Lưu đồ thuật tốn -  Kết Code #include #include void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 300.0, 0.0, 300.0); } void setPixel(GLint xCoordinate, GLint yCoordinate) { glBegin(GL_POINTS); glVertex2i(xCoordinate, yCoordinate); glEnd(); glFlush(); } void MidpointLine(int x1, int y1, int x2, int y2) { int Dx = x2 - x1; int Dy = y2 - y1; int x = x1; int y = y1; setPixel(x1, y1); float D = Dy - (Dx >> 1); // ~ float D = Dy - Dx/2; while (x (x,y) đường tròn o F(x,y) < => (x,y) đường tròn o F(x,y) > => (x,y) ngồi đường trịn  Nếu M vòng tròn => S gần đường tròn  Ngược lại => P gần đường trịn • Biến định d: giá trị hàm điểm M =F( • Nếu + 1, < chọn S, o =F( o = • Nếu - )= > chọn P, =F( o = - tăng 1, + 2, giữ nguyên - )= - + 3) = tăng 1, + 2, + giảm - )= - + 5) = • Giá trị khởi đầu • Điểm vẽ có tọa độ (0,R) • Biến định d có giá trị: + d = F(1, R – 1/2) = + ( • - R + 1/4 ) - Đặt biến định h = d – 1/4, ta có: h + 1/4 = 5/4 – R h=1–R  Lưu đồ thuật toán  Kết -Code #include #include void init(void){ glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 300.0, 0.0, 300.0); } void setPixel(GLint xCoordinate, GLint yCoordinate){ = 5/4 – R glBegin(GL_POINTS); glVertex2i(xCoordinate, yCoordinate); glEnd(); glFlush(); } void ve8diem(int x0, int y0, int x, int y){ setPixel(x0 + x, y0 + y); setPixel(x0 - x, y0 + y); setPixel(x0 + x, y0 - y); setPixel(x0 - x, y0 - y); setPixel(x0 + y, y0 + x); setPixel(x0 - y, y0 + x); setPixel(x0 + y, y0 - x); setPixel(x0 - y, y0 - x); } void drawCircleMidpoint(int x0, int y0, int r){ int x = 0; int y = r; int f = - r; while (x < y){ if (f < 0) f += (x

Ngày đăng: 23/08/2022, 15:56

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan