b Chia miền xác định thành n đoạn bằng nhau, tính giá trị y lại các đầu mút của các đoạn rồi dùng lệnh linetox,y để vẽ.. Viết chương trình nhập toạ độ nguyên của hai điểm đầu mút của đoạ
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
Đà Nẵng, 12/2013
Trang 2MỤC LỤC
NỘI DUNG THỰC HÀNH 2
PHẦN 1 BÀI TẬP VỀ NHÀ 4
Bài tập 1 Khái quát hệ thống đồ họa 4
Bài tập 2 Các thuật toán cơ bản 7
Bài tập 3 Hình học Fractal 13
Bài tập 4 Phép biến đổi 2 chiều 18
Bài tập 5 Thiết kế đường cong và mặt cong 25
PHẦN 2 BÀI TẬP TRÊN LỚP 31
Bài tập 1 31
Bài tập 2 35
Trang 3NỘI DUNG THỰC HÀNH PHẦN 1 : BÀI TẬP VỀ NHÀ
Bài tập 1 : Khái quát hệ thống đồ họa
Viết chương trình vẽ đồ thị hàm số y=sin(x) với -x bằng cách:
a) Cho x chạy từ - đến , ở mỗi bước tính giá trị y rồi làm tròn để vẽ bằng lệnh
putpixel(x,y,c).
b) Chia miền xác định thành n đoạn bằng nhau, tính giá trị y lại các đầu mút của các
đoạn rồi dùng lệnh lineto(x,y) để vẽ Thay đổi giá trị n để theo dõi kết quả.
Bài tập 2 : Các thuật toán cơ bản
1 Viết chương trình nhập toạ độ nguyên của hai điểm đầu mút của đoạn thẳng
AB Dùng thuật toán Bresenham để vẽ đoạn thẳng AB
Cần nhập cho tất cả các trường hợp
2 Viết chương trình nhập toạ độ của tâm I và bán kính R của đường tròn C(I,R) Dùng thuật toán Michener để vẽ đường tròn C
Bài tập 3 : Hình học Fractal
Viết chương trình nhập bậc n của các đường cong Fractal Vẽ các đường cong bậc n:
đường cong Koch, C và Rồng
Bài tập 4 : Phép biến đổi 2 chiều
Cài đặt các phép affine hai chiều trong hệ toạ độ thuần nhất:
a) Khai báo kiểu afine
b) Định nghĩa các hàm cần thiết: biến đổi ảnh của 1 điểm, cài đặt cho các phép tịnh tiến, phép quay, phép biến dạng, phép méo hình, tích hai phép afine
Chương trình vẽ giữa màn hình một đa giác đều và gọi các hàm này để mô phỏng quạt máy quay bằng cách cho đa giác quay quanh tâm của nó
Bài tập 5 : Thiết kế đường cong và mặt cong
Viết chương trình nhập toạ độ của n điều khiển, dùng thuật toán Casteljau để vẽ
đường cong qua các điểm điều khiển này
Trang 5PHẦN 1 BÀI TẬP VỀ NHÀ Bài tập 1 Khái quát hệ thống đồ họa
Thuật toán :
Thiết lập các cấu hình đơn giản
Vẽ hệ trục tọa độ chia màn hình thành 4 phần bằng nhau
Trang 7Kết quả Demo
Câu a
Câu b
Trang 8Bài tập 2 Các thuật toán cơ bản
Thuật toán :
Câu 1 :
Nhập các thông số cần thiết và tính ∆x, ∆y, m
Xét các trường hợp :
- Nếu m>1 và m<-1 có điểm chung là thay ∆x, ∆y cho nhau
- Nếu m<0 thì ∆y = -∆y
Tính e(Ti), e(Si), e1
Xét :
- Nếu m>1 hoặc m<-1 lặp điều kiện yA!=yB (y tăng chậm hơn)
o Putpixel(x,y,c)
o Nếu e<0 (ban đầu là e1) thì e+= e(Ti)
o Ngược lại e+=e(Si) và tăng x lên 1 đơn vị
- Nếu m>1 thì tăng y lên 1 và ngược lại giảm y 1 đơn vị
o Lặp điều kiện xA!=xB (x tăng chậm hơn y)
o Putpixel(x,y,c)
o Nếu e<0 e+=e(Ti)
o Ngược lại e+=e(Si)
Ngược lại d+=4*(x-y)+10 và giảm y 1 đơn vị
Tăng x lên 1 đơn vị
Trang 16c1 = Encode(p1); c2 = Encode(p2);
in1 = Inw(p1); in2 = Inw(p2);
if(in1 && in2) return 1;
Trang 19Bài tập 4 Phép biến đổi 2 chiều
Trang 20- d+=45;
+ Ngược lại linerel(int(l*cos(d*Rad)),int(l*sin(d*Rad)));
3 Cong Rồng (Dragon)
+ Giống đường cong C nhưng có sự xuất hiện thêm biến dấu s
+ Lời gọi đệ quy sẽ là:
Trang 23void xoaydoc(point *p1,point*p2,point *p3,point*p4)
{ //xoay quanh truc ngang;
Trang 24void xoayngang(point *p1,point*p2,point *p3,point*p4)
{ //xoay quanh truc ngang;
Trang 26Bài tập 5 Thiết kế đường cong và mặt cong
Câu 1 : khai báo
typedef float MATRIX[3][3];
typedef MATRIX Affine;
typedef MATRIX Point ;
Câu 2 : biến đổi ảnh của 1 điểm
void Change(Point A,Affine &B){
Trang 27typedef float Point[2];
typedef float Affine[3][3];
void Change(Point A,Affine &B){
B[0][0]=A[0]; B[0][1]=A[1]; B[0][2]=1;
Trang 29void Codan(Affine &T,float Sx,float Sy){
Trang 32PHẦN 2 BÀI TẬP TRÊN LỚP Bài tập 1.
Viết chương trình cài đặt thuật toán Bresham Ứng dụng thuật toán Bresham để vẽ ngôinhà
Trang 36- Vẽ lại đường thẳng P1P2 với màu khác
- Vẽ lại đường thẳng P1P2 với màu khác
Mã nguồn
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
//Thuat toan to mau fill
void fill(int x, int y, int oldcolor, int newcolor)
struct point {float x,y;};
struct code {int l,t,r,b;};
code Encode(point p)
{
code c;