Tải bản đầy đủ (.docx) (17 trang)

đề tài các kỹ thuật biến đổi hình-chương trình mô phỏng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (317.26 KB, 17 trang )

Môn: Đồ họa máy tính
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC THÀNH ĐÔ
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN
MÔN : Đồ Họa Máy Tính
Đề Tài: Các kỹ thuật biến đổi hình-chương trình mô phỏng
Giáo Viên Hướng Dẫn : Trần Xuân Thanh
Lớp: CĐTin-K8
Thành viên nhóm 7 :
Mai Văn Long
Trịnh Thị Thu Phương(NT)
Khổng Thị Thảo My
Nguyễn Đắc Mạnh
Môn: Đồ họa máy tính
LỜI NÓI ĐẦU
Hiện nay đồ họa máy tính là một trong những chương trình thông dụng nhất, nó
đóng góp phần quan trọng là cho giao tiếp con người và máy tính trở nên thân
thiện. Thật vậy, giao diện kiểu văn bản đã được thay thế hoàn toàn bằng giao diện
đồ họa, cùng với công nghệ đa phương tiện đã đưa ngành Công Nghệ Thông Tin
sang phiên bản mới.
Cuốn tài liệu này nhóm em “ trình bày tóm tắt các kỹ thuật biến đổi hình” gồm có
phép biến đổi hình 2D, phép biến đổi hình 3D, biến đổi hệ trục tọa độ, sử dụng
phép biến đổi affine trong chương trình… Cuối bài nhóm em có cho chương trình
mô phỏng để mô tả các kỹ thuật biến đổi hình.
Trong quá trình làm còn có nhiều thiếu sót, rất mong thầy và các bạn đóng góp
chân thành cho nhóm em!
Xin chân thành cảm ơn!!
Môn: Đồ họa máy tính
PHẦN I: GIỚI THIỆU VỀ ĐỒ HỌA MÁY TÍNH


Sự phát triển của khoa học, kĩ thuật, nghệ thuật, kinh doanh, và công nghệ luôn
luôn phụ thuộc vào khả năng truyền đạt thôngtin của chúng ta, hoặc thông qua các
bit dữ liệu lƣu trữ trong microchip hoặc thông qua giao tiếp bằng tiếng nói. Câu
châmngôn từ xa xƣa “một hình ảnh có giá trị hơn cả vạn lời” hay “trăm nghe
không bằng một thấy” cho thấy ý nghĩa rất lớn củahình ảnh trong việc chuyển tải
thông tin. Hình ảnh bao giờ cũng được cảm nhận nhanh và dễ dàng hơn, đặc biệt là
trong trƣờnghợp bất đồng về ngôn ngữ. Do đó không có gì ngạc nhiên khi mà
ngay từ khi xuất hiện máy tính, các nhà nghiên cứu đã cốgắng sử dụng nó để phát
sinh các ảnh trên màn hình. Trong suốt gần 50 năm phát triển của máy tính, khả
năng phát siinh hìnhảnh bằng máy tính của chúng ta đã đạt tới mức mà bây giờ hầu
như tất cả các máy tính đều có khả năng đồ họa.

Đồ họa máy tính là một trong những lĩnh vực lí thú nhất và phát triển nhanh nhất
của tin học. Ngay từ khi xuất hiện, đồhọa máy tính đã có sức lôi cuốn mãnh liệt,
cuốn hút rất nhiều người ở nhiều lĩnh vực khác nhau như khoa học, nghệ thuật,
kinh doanh, quản lí, Tính hấp dẫn và đa dạng của đồ họa máy tính có thể đƣợc
minh họa rất trực quan thông qua việc khảo sát các ứng dụng của nó.
I. Một số ứng dụng của đồ họa máy tính
Ngày nay đồ họa máy tính được sử dụng trong rất nhiều lĩnh vực khác nhau công
nghiệp, thương mại, quản lý,giáo dục, giải trí
I.1. Hỗ trợ thiết kế
Một trong những ứng dụng lớn nhất của đồ họa máy tính là hỗ trợ thiết kế (CAD -
- computer-aided design). Ngày nay CAD đã được sử dụng hầu hết trong việc thiết
kế các cao ốc, ô tô, máy bay, tàu thủy, tàu vũ trụ, máy tính, trang trí mẫu vải, vàrất
nhiều sản phẩm khác.
Sử dụng các chương trình này, đầu tiên các đối tượng được hiển thị dƣới dạng các
phác thảo của phần khung (wireframeoutline), mà từ đó có thể thấy đƣợc toàn bộ
hình dạng và các thành phần bên trong của các đối tượng. Sử dụng kĩ thuật
này,ngƣời thiết kế sẽ dễ dàng nhận thấy ngay các thay đổi của đối tượng khi tiến
hành hiệu chỉnh các chi tiết hay thay đổi góc nhìn,

….Một khi đã thiết kế xong phần khung của đối tượng, các mô hình chiếusáng, tô
màu và tạo bóng bề mặt sẽ được kết hợp để tạo ra kết quả cuối cùngrất gần với thế
giới thực .
I.2. Lĩnh vực giải trí-nghệ thuật
Môn: Đồ họa máy tính
- Trong lĩnh vực nghệ thuật, các chương trình máy tính như Paint Shop
Pro,Adobe Photoshop, 3D Studio, … hỗ trợ rất đắc lực cho các họa sĩ, các
nhà tạo mẫutrong việc thiết kế các hình ảnh sống động, và rất thực. Với các
chương trình này,người họa sĩ được máy tính tạo cho cảm giác y như đang
làm việc ngoài đời thực bằngcách cung cấp các công cụ như khung vẽ, giá
vẽ, bảng pha màu, các hiệu ứng ba chiều,… làm cho họ cảm thấy rất thoải
mái và tiện lợi.
- Ngoài ra đồ họa máy tính còn giúp tạo ra các chƣơng trình trò chơi, giải trí;
hỗtrợ cho các kĩ xảo điện ảnh, cho các nhà làm phim. Có nhiều bộ phim rất
nổi tiếng nhờ vào kĩ xảo điện ảnh như : Công viên Khủng long kỉ Jura
(Jurassic Park), Titanic, Thế giới nước (Water World), …
I.3. Giáo dục và đạo tạo
- Hiện nay các chƣơng trình mô phỏng cấu trúc của các vật thể, tiến trình của
các phản ứng hóa học, hoạt động của các góitin trên mạng máy tính, … được
dùng rất nhiều trong việc hỗ trợ giảng dạy.
- Trong đào tạo, các ứng dụng mô phỏng được dùng để kiểm tra trình độ
người lái, huấn luyện phi công, điều khiển giaothông, …
I.4. Giao tiếp giữa máy tính và người sử dụng
- Mọi ứng dụng đều phải có giao diện giao tiếp với người dùng. Giao diện đồ họa thực sự
là một cuộc cách mạng mang lại sự thuận tiện và thoải mái cho người dùng ứng dụng.
Các ứng dụng dựa trên hệ điều hành MS Windows là một minh họa rất trực quan của
giao diện đồ họa. Các chức năng của các ứng dụng này được thiết kế cho ngƣời dùng
làm việc thông qua các biểu tượngmô tả chức năng đó. Ví dụ, chức năng lƣu tập tin
được hiểu thông qua biểu tượng đĩa mềm, chức năng in ấn được hiểu thông qua biểu
tượng máy in, … Để chọn các chức năng, người dùng sử dụng chuột trỏ đến và nhấn

vào các biểu tượng tương ứng. Điểm thuận lợi chính khi dùng biểu tượng là kích thước
không gian mà nó chiếm ít hơn nhiều so với dùng văn bản để mô tả cho cùng một chức
năng, ngoài ra việc nắm bắt các chức năng qua các biểu tượng sẽ dễ dàng hơn rất nhiều
khi người dùng gặp trở ngại về mặt ngôn ngữ.
- Các ứng dụng có giao diện đồ họa còn cho phép người dùng khả năng làm
việc dễ dàng với nhiều cửa sổ với nhiều dạng tài liệu khác nhau cùng một
lúc.
II. Khái niệm về đồ họa máy tính
- Đồ họa máy tính là tất cả những gì liên quan đến việc sử dụng máy tínhđể
phát sinh ra hình ảnh. Các vấn đề liên quan tới công việc này bao gồm :tạo,
lưu trữ, thao tác trên các mô hình (các mô tả hình học của đối tượng) vàcác
ảnh.
- Theo định nghĩa này thì đồ họa máy tính bao gồm việc thiết kế phầncứng
như thiết bị hiển thị, các thuật toán cần thiết để phát sinh các đường trêncác
thiết bị này, các phần mềm được sử dụng cho cả người lập trình hệ thốngvà
Môn: Đồ họa máy tính
người lập trình ứng dụng đồ họa, và các chương trình ứng dụng tạo ảnh bằng
máy tính,thiết kế, cài đặt và xây dựng, thông tin mà hình ảnh mang lại là hầu
nhƣ không thể thiếu được. Kĩ thuật trực quan (scientific visualization) đã trở
nên là một lĩnh vực rất quan trọng từ năm 1980, khi các nhà nghiên cứu
khoa học và các kĩ sư nhận ra rằng họ không thể xử lí một lượng dữ liệu
khổng lồ phát sinh từ các siêu máy tính mà dữ liệu không được tóm lược và
làm nổi bật các xu hướng và hiện tượng qua nhiều loại biểu diễn đồ họa
khác nhau.
- Đồ họa máy tính tương tác là một trong những phương tiện mang lại thêm
nhiều sự thuận lợi cho người dùng trong việc phát sinh hình ảnh kể từ khi có
phát minh của máy ảnh và truyền hình. Với máy tính, chúng ta có thể tạo các
hình ảnh khôngchỉ của các đối tượng cụ thể, thực tế, mà còn của các đối
tượng trừu tượng, nhân tạo; các biểu diễn của dữ liệu mà không cótính kế
thừa về mặt hình học, như là kết quả điều tra, khảo sát. Hơn nữa, với đồ họa

máy tính chúng ta không bị giới hạn trong các ảnh tĩnh. Các ảnh động thông
thường mang lại nhiều hiệu quả hơn so với ảnh tĩnh, đặc biệt là với các hiện
tượng biến đổi theo thời gian, cả thực tế (như sự đổi hướng của cánh máy
bay siêu âm, hay sự phát triển của khuôn mặt người từ lúc trẻ thơ tới lúc già)
và trừu tượng (như là xu hướng phát triển của việc sử dụng năng lượng, gia
tăng dân số, …).
- Có nhiều cách tiếp cận trong việc học môn đồ họa, trải rộng từ việc nghiên
cứu phần cứng tới việc học để sử dụng đồhọa máy tính chỉ trong một lĩnh
vực chuyên biệt nào đó như là thiết kế mạch tích hợp cao (VLSI-very large
scale integrated circuit). Ở đây chúng ta tiếp cận từ góc độ của người lập
trình ứng dụng, đó là người sử dụng tất cả các hỗ trợ của phần cứng các
công cụ phần mềm để xây dựng nên các ứng dụng.
- Tuy nhiên để có thể thiết kế và cài đặt các chương trình ứng dụng đồ họa
được tốt, ngoài việc tìm hiểu các khả năng củacông cụ lập trình, chúng ta
cũng cần phải nắm vững các khái niệm về phần cứng; các vấn đề, các
nguyên lí liên quan đến càiđặt phần mềm, các thuật toán, các ứng dụng, …
Môn: Đồ họa máy tính
PHẦN II: CÁC PHÉP BIẾN ĐỔI ĐỒ HỌA
A. Các phép biến đổi hình học hai chiều
I. Các phép biến đổi Affine(Affine Transformations)
- Phép biến đổi Affine là phép biến đổi tuyến tính tọa độ điểm đặc trưng của
đối tượng thành tập tương ứng các điểm mới để tạo ra các hiệu ứng cho toàn
đối tượng.
Ví dụ: Phép biến đổi tọa độ với chỉ 2 điểm đầu cuối của đoạn thẳng tạo
thành 2 điểm mới mà khi nối chúng với nhau tạo thành đoạn thẳng mới. Các
điểm nằm trên đoạn thẳng sẽ có kết quả là điểm nằm trên đoạn thẳng mới
cùng với cùng phép biến đổi thông qua nội suy.
II. Các phép biến đổi đối tượng
1. Phép biến đổi vị trí
- Giả sử ta có điểm P=[x y] trong mặt phẳng với [x y] là vecto vị trí của P,

kí hiệu là [X].
T=
o Gọi ma trận T là ma trận biến đổi sẽ có dạng:
y
P P’
X
o Ta có điểm P sau phép biến đổi thành P’ có giá trị [x’ y’].
o [X]*[T]=[x y] * = [(ax+cy)(bx+dy)]=[x’ y’]
Hay x’=ax+cy
y’=bx+dy
Xét ma trận biến đổi T:
1.1. Phép bất biến
- a=d=1 và b=c=0 và ma trận cho phép bất biến:
T=
[X]*[T]=[x y]*=[x y]=[x’ y’]
1.2. Phép biến đổi tỷ lệ(scaling)
- Nếu d=1 và b=c=0 thì ma trận biến đổi là
T=
Môn: Đồ họa máy tính
x’=ax
y’=y
P’ dịch chuyển theo trục x với tỷ lệ a xác định.
[X]*[T]=[x y]*=[(ax) y]=[x’ y’]
- Nếu b=c=0 thì ma trận biến đổi là:
T=
[X]*[T]=[x y]*= [ax dy]=[x’ y’]
1.3. Các biến dạng
- Khi a=d=1 thì tọa độ P’ phụ thuộc vào thay đổi b và c
o Xét c= 0
[X]*[T]=[x y]*= [x bx+y]=[x’ y’]

Có P’ không thay đổi giá trị tọa độ x, còn y’ thay đổi phụ thuộc vào cả
b và x
- Xét b=0
[X]*[T]=[x y]*= [x +cy y]=[x’ y’]
1.4. Phép quay
[T]=
III. Phép biến đổi tổng hợp
[X*]= [X]*[T3]=[x y]*= [y -x]
B. TỌA ĐỘ ĐỒNG NHẤT VÀ CÁC PHÉP BIẾN ĐỔI
I. Tọa độ đồng nhất
- Phép biến đổi tổng hợp:
P’’=P’*[T’]+[T’’]=(P+[T])[T’]+[T’’]
- Tọa độ đồng nhất của vector vị trí [X]=[x y 1]. Khi đó mặt trận biến đổi sẽ
là 3x3:
Môn: Đồ họa máy tính
[T]=
P’=P.[T]=[x y 1]*
x’=ax+cy+dx
y’=bx+dy+dy
[X’]=[x’ y’ 1]
Trong đó dx,dy là khoảng tịnh tiến theo trục x và y.
II. Phép biến đổi với tọa độ đồng nhất
- Ma trận biến đổi đồng nhất
[T]=
1. Phép tịnh tiễn
- Có a=d=1 và b=c=0
[T]=
[x’ y’ 1]=[x y 1] =[x+m y+n 1]
2. Phép tỷ lệ
- Tương tự ma trận tỷ lệ:

[Ts]= [x’ y’ 1]=[x y 1] =[x.Sx y.Sy 1]
3. Phép quay
[x’ y’ 1]=[x y 1]
=[(xcos ) (xsin ) 1]
C. CÁC PHÉP BIẾN ĐỔI HÌNH HỌC BA CHIỀU
I. Phép biến đổi tỷ lệ
- Phép biến đổi tỉ lệ làm thay đổi kích thước đối tượng. Để co hay giãn tọa độ
của một điểm P(x,y) theo trục hoành và trục tung lần lượt là Sx và Sy (gọi là
các hệ số tỉ lệ), ta nhân Sx và Sy lần lượt cho các tọa độ của P.
Môn: Đồ họa máy tính
- Khi các giá trị Sx , Sy nhỏ hơn 1, phép biển đổi sẽ thu nhỏ đối tượng.
Ngược lại, khi các giá trị này lớn hơn 1, phép biến đổi sẽ phóng lớn đối
tượng.
- Khi Sx = Sy , người ta gọi đó là phép đồng dạng (uniform scaling). Đây là
phép biến đổi bảo toàn tính cân xứng của đối tượng. Ta gọi là phép phóng
đại nếu |S|>1 và là phép thu nhỏ nếu |S|<1.
- Nếu hai hệ số tỉ lệ khác nhau thì ta gọi là phép không đồng dạng. Trong
trường hợp hoặc Sx hoặc Sy có giá trị 1, ta gọi đó là phép căng (strain).
II. Phép quay
- Phép quay làm thay đổi hướng của đối tượng. Một phép quay đòi hỏi phải có
tâm quay, góc quay. Góc quay dương thường được qui ước là chiếu ngược
chiều kim đồng hồ.
1. Phép quay quanh gốc tọa độ
- Ta có công thức biến đổi của phép quay điểm P(x,y) quanh gốc tọa độ góc θ
(xem hình 1):
Hay Q = P*M
với M= cosθ sinθ -sinθ cosθ
- Phép quay quanh gốc tọa độ.
Môn: Đồ họa máy tính
2. Phép quay quanh 1 điểm bất kỳ

- Xét điểm P(P.x,P.y) quay quanh điểm V(V.x, V.y) một góc θ đến điểm
Q(Q.x,Q.y). Ta có thể xem phép quay quanh tâm V được kết hợp từ phép các biến
đổi cơ bản sau:
- Phép tịnh tiến (-V.x, -V.y) để dịch chuyển tâm quay về gốc tọa độ
- Quay quanh gốc tọa độ O một góc θ.
- Phép tịnh tiến (+V.x, +V.y) để đưa tâm quay về vị trí ban đầu.
Ta cần xác định tọa độ của điểm Q (xem hình 2 )
Môn: Đồ họa máy tính
- Từ phép tịnh tiến (-V.x,-V.y) biến đổi điểm P thành P' ta được:
P' = P + V
hay
- Phép quay quanh gốc tọa độ biến đổi điểm P' thành Q'
Q' = P'.M.
- Phép tịnh tiến (+V.x, +V.y) biến đổi điểm Q' thành Q ta được:
Q = Q' + V
hay
Vậy Q = P.M + tr. Với
III. Phép đối xứng
Môn: Đồ họa máy tính
- Phép đối xứng trục có thể xem là phép quay quanh trục đối xứng mõt góc
180°
- Phương trình ban đầu
hay:
- (Q.x,Q.y)= (P.x,P.y). a b c d + (tr
x
,tr
y
)
- Trục đối xứng là trục hoành :
M= 1 0 0 1

- Ta có:
- Tương tự trục đối xứng là trục tung
- Ta có:
M= 1 0 0 1
IV. Phép biến dạng
- Phép biến dạng biến đổi làm thay đổi, méo mó hình dạng của các đối tượng.
- Biến dạng theo phương trục x sẽ làm thay đổi hoành độ còn tung độ giữ
nguyên.
- biến đổi điểm P(P.x, P.y) thành điểm Q(Q.x, Q.y) theo phương trục x là
phép biến đổi được biểu diễn bởi phương trình sau:
Môn: Đồ họa máy tính
M= 1 0 h 1
- Biến dạng theo phương trục y sẽ làm thay đổi tung độ còn hoành độ giữ
nguyên.
M= 1 g 0 1
V. Phép quay ba chiều
1. Quay quanh các trục tọa độ
- Phép quanh quanh các trục tọa độ ox, oy và oz với góc dương:
o Quay quanh trục oz
o Quay quanh trục ox:
o Qua quanh trục oy:
PHẦN III: CHƯƠNG TRÌNH MÔ PHỎNG
Bài 1:
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>
#define RADS 0.017453293
void Function1(){
line(10,getmaxy()/2,getmaxx()-10,getmaxy()/2);

line(getmaxx()/2,10,getmaxx()/2,getmaxy()-10);
}
void Function2(int x1, int y1, int x2, int y2,int x3, int y3){
line(getmaxx()/2+x1,getmaxy()/2-y1,getmaxx()/2+x2,getmaxy()/2-y2);
line(getmaxx()/2+x2,getmaxy()/2-y2,getmaxx()/2+x3,getmaxy()/2-y3);
line(getmaxx()/2+x3,getmaxy()/2-y3,getmaxx()/2+x1,getmaxy()/2-y1);
}
void Function3(int x1, int y1, int x2, int y2, int x3,int y3,int xq,int yq,int goc){
float x11,y11,x22,y22,x33,y33;
Môn: Đồ họa máy tính
float anpha=RADS*goc;
x11=int(x1*cos(anpha)-y1*sin(anpha) + (1-
cos(anpha))*xq+sin(anpha)*yq);
y11=int(x1*sin(anpha)+y1*cos(anpha)-sin(anpha)*xq+(1-
cos(anpha))*xq);
x22=int(x2*cos(anpha)-y2*sin(anpha)+(1-
cos(anpha))*xq+sin(anpha)*yq);
y22=int(x2*sin(anpha)+y2*cos(anpha)-sin(anpha)*xq+(1-
cos(anpha))*xq);
x33=int(x3*cos(anpha)-y3*sin(anpha)+(1-
cos(anpha))*xq+sin(anpha)*yq);
y33=int(x3*sin(anpha)+y3*cos(anpha)-sin(anpha)*xq+(1-
cos(anpha))*xq);
Function2(x11,y11,x22,y22,x33,y33);
}
void main(){
clrscr();
int driver=DETECT,mode;
initgraph(&driver,&mode,”F:\\TC\\BGI”);
int x1=50,y1=20,x2=50,y2=100,x3=200,y3=20;

int xq=100, yq=100;
float goc=30;
Function1();
Function2(x1,y1,x2,y2,x3,y3);
Function3(x1,y1,x2,y2,x3,y3,xq,yq,goc);
getch();
closegraph();
}
-Hình hiển thị
Môn: Đồ họa máy tính
Câu 2: Cho đoạn AB trong không gian có tọa độ A(2,1,1) và B(1,3,4) quay đoạn thẳng quanh trục
một góc 30 độ
Bài làm:
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>
#define RADS 0.017453293
void Function1(){
line(10,getmaxy()/2,getmaxx()-10,getmaxy()/2);
line(getmaxx()/2,10,getmaxx()/2,getmaxy()-10);
}
void Function2(int x1, int y1, int x2, int y2,int x3, int y3){
line(getmaxx()/2+x1,getmaxy()/2-y1,getmaxx()/2+x2,getmaxy()/2-y2);
Môn: Đồ họa máy tính
line(getmaxx()/2+x2,getmaxy()/2-y2,getmaxx()/2+x3,getmaxy()/2-y3);
line(getmaxx()/2+x3,getmaxy()/2-y3,getmaxx()/2+x1,getmaxy()/2-y1);
}
void Function3(int x1, int y1, int x2, int y2, int x3,int y3,int xq,int yq,int goc){
float x11,y11,x22,y22,x33,y33;

float anpha=RADS*goc;
x11=int(x1*cos(anpha)-y1*sin(anpha) + (1-
cos(anpha))*xq+sin(anpha)*yq);
y11=int(x1*sin(anpha)+y1*cos(anpha)-sin(anpha)*xq+(1-
cos(anpha))*xq);
x22=int(x2*cos(anpha)-y2*sin(anpha)+(1-
cos(anpha))*xq+sin(anpha)*yq);
y22=int(x2*sin(anpha)+y2*cos(anpha)-sin(anpha)*xq+(1-
cos(anpha))*xq);
x33=int(x3*cos(anpha)-y3*sin(anpha)+(1-
cos(anpha))*xq+sin(anpha)*yq);
y33=int(x3*sin(anpha)+y3*cos(anpha)-sin(anpha)*xq+(1-
cos(anpha))*xq);
Function2(x11,y11,x22,y22,x33,y33);
}
void main(){
clrscr();
int driver=DETECT,mode;
initgraph(&driver,&mode,”F:\\TC\\BGI”);
int x1=20,y1=10,x2=100,y2=300,x3=10,y3=40;
int xq=100, yq=100;
float goc=145;
Function1();
Function2(x1,y1,x2,y2,x3,y3);
Function3(x1,y1,x2,y2,x3,y3,xq,yq,goc);
getch();
closegraph();
}
Môn: Đồ họa máy tính
 Hình hiển thị

×