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

ĐỀ TÀI VẼ NGÔI SAO 5 CÁNH VỪA QUAY VỪA DI CHUYỂN

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 (246.56 KB, 15 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN
MÔN: ĐỒ HỌA MÁY TÍNH
ĐỀ TÀI: VẼ NGÔI SAO 5 CÁNH VỪA QUAY VỪA DI
CHUYỂN

1
THÀNH VIÊN THỰC HIỆN: 1. Hỏa Tiến Anh
2. Đinh Thị Như Hương
3. Nguyễn Thị Sim
MỤC LỤC
2
Lời nói đầu
Đồ 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 và được sử dụng ở nhiều lĩnh vực khác nhau như : khoa
học, nghệ thuật, kinh doanh, thương mại, công nghiệp, quản lí, giáo dục, giải trí, …
Số lượng các chương trình đồ họa ứng dụng thật khổng lồ và phát triển liên tục.
Với sự hứng thú về đồ họa 2D nhóm chúng em chọn đề tài “Vẽ hình sao 5
cánh quay quanh tâm và di chuyển quanh màn hình bằng 4 phím mũi tên” để có
cơ hội "m hiểu sâu hơn môn học đồ họa máy (nh này. Qua thời gian "m hiểu,
chúng em có ý tưởng và các thuật toán cho bài tập lơn và thêm kinh nghiêm sau
hơn về đồ họa.
Chúng em xin gửi lời cảm ơn chân thành tới cô giáo: “đã tận tâm chỉ bảo và
giúp đỡ chúng em hoàn thành đề tài này. Trong quá trình làm đề tài sẽ không
tránh khỏi những sai sót, khuyết điểm. Vì vậy, nhóm thực hiện chúng em hy vọng
nhận được sự đánh giá và đóng góp nhiệt "nh từ phía thầy cô và các bạn để bài
của nhóm chúng em được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn!


3
I. PHẦN GIỚI THIỆU
1.Vẽ sao 5 cánh quay quanh tâm
1.1.Ý tưởng.
a. Mô tả ngôi sao 5 cánh.
- Hình bên là ngôi sao 5 cánh
- Đặc điểm:
Ngôi sao có cách đỉnh cách đều tâm O 1 khoảng
r.
Hai đỉnh liên tiếp kề nhau 72
o
b. Ý tưởng vẽ hình sao
• Hệ trục tọa độ
mode 19
Với O(0,0);
Ox có số điểm ảnh tối đa là 200 pixel;
Oy có số điểm ảnh tối đa là 320 pixel;
• Vẽ sao: Gắn vào hệ trục XO1Y
Tọa độ tâm là O1(xc,yc);
Khoảng cách từ tâm đến đỉnh là r;
Xác định tọa độ của các đỉnh
- Quay A quanh tâm O1 theo hướng + 1
góc α + (72*π)/180 ta được A2.
4
- Quay A quanh tâm O1, theo chiều hường + một góc
α+(72*2*π)/180. Ta được A3
- Quay A quanh tâm O1, theo chiều hướng + một góc α +
(72*3*π)/180 ta được A4.
- Quay A quanh tâm O1, theo chiều hướng + một góc α
+(72*4*)/180 ta được A5.

Khi đó hình sao ta cần là:
c. Di chuyển hình sao.
• Quay quanh tâm.
Thực hiện việc chuyển ngôi sao vừa tạo thành màu giống màu nền và
sau đó tạo 1 ngôi sao khác các đình quay quanh tâm cùng 1 góc β nào
đó!
• Sao di chuyển
Khi thực hiện phép di chuyển hình sao lên trên, ta thực hiện phép
tịnh tiến hình sao theo vector I có tọa độ (-1;0).
Khi thực hiện phép di chyển hình sao xuống dưới, ta thực hiên
phep tịnh tiên hình sao theo vector H có tọa độ (1;0).
1.2. Giải thuật
• Vẽ hình sao.
Vẽ hình sao với tâm có tọa độ là (xc, yc), khoảng cách từ tâm đền
đỉnh r là c. Đỉnh A1(xo,yo) với xo, yo tạo với trục Ox 1 góc α, các
đỉnh A2, A3, A4, A5 được lưu trên các mảng 1 chiều A2(a[1],b[1])
A3(a[2],b[2]) A4(a[3],b[3]) A5(a[4],a[4]).
Code vẽ sao:
void vesao(int mt){
5
setcolor(mt); //ve ngoi sao, chu y a1 la mang cac
dinh ngoai ngoi sao
for(int i=1;i<=2;i++){
chuyenden(a1[i].x,a1[i].y);veden(a1[i+2].x,a1[i+2].y);
chuyenden(a1[i].x,a1[i].y);veden(a1[i+3].x,a1[i+3].y); }
chuyenden(a1[3].x,a1[3].y);veden(a1[5].x,a1[5].y);
}
for(int i=1;i<=5;i++){
a1[i].x=2.5-(0.6*cos(phi*M_PI/180));
a2[i].x=2.5+(0.3*cos(phi*M_PI/180));

a1[i].y=2+(0.6*sin(phi*M_PI/180));
a2[i].y=2-(0.3*sin(phi*M_PI/180));
phi+=72; //moi lan quay goc thay doi 72 do(cai nay search dc)



}
vesao(RED);
delay(200);
vesao(GREEN);

Sao vừa quay quanh tâm vừa di chuyển

int main()
6

{
int gd=0,gm;
initgraph(&gd,&gm,"");
cuaso(1,1,4,3);
setbkcolor(GREEN);
setcolor(RED);

khungnhin(120,100,520,380);
//tinh toan cac dinh cua ngoi sao de noi chung lai trong ham
vesao
int phi=90;{

for(int i=1;i<=5;i++){
a1[i].x=2.5+(0.6*cos(phi*M_PI/180));

a2[i].x=2.5+(0.3*cos(phi*M_PI/180));
a1[i].y=2+(0.6*sin(phi*M_PI/180));
a2[i].y=2+(0.3*sin(phi*M_PI/180));
phi+=72;
}
clearviewport();

vesao(RED);
delay(200);
vesao(GREEN);

char c1, c2; int i=1;
while (1) {

if (i==360) i=0;
else i++;
do{
if (kbhit()) {
if ((c1=getch())==0) {
c2 = getch();

{
for(int i=1;i<=5;i++){
a1[i].x=2.5-(0.6*cos(phi*M_PI/180));
a2[i].x=2.5+(0.3*cos(phi*M_PI/180));
7
a1[i].y=2+(0.6*sin(phi*M_PI/180));
a2[i].y=2-(0.3*sin(phi*M_PI/180));
phi+=72; //moi lan quay goc thay doi 72 do(cai nay search
dc)

}

}
}
vesao(RED);
delay(200);
vesao(GREEN);
}

{
for(int i=1;i<=5;i++){
a1[i].x=2.5+(0.6*cos(phi*M_PI/180));
a2[i].x=2.5-(0.3*cos(phi*M_PI/180));
a1[i].y=2-(0.6*sin(phi*M_PI/180));
a2[i].y=2+(0.3*sin(phi*M_PI/180));
phi+=72;
}
clearviewport();

vesao(RED);
delay(200);
vesao(GREEN);
delay(200);

}
for(int i=1;i<=5;i++){
a1[i].x=2.5+(0.6*cos(phi*M_PI/180));
a2[i].x=2.5-(0.3*cos(phi*M_PI/180));
a1[i].y=2+(0.6*sin(phi*M_PI/180));
a2[i].y=2-(0.3*sin(phi*M_PI/180));

phi+=72;
}



{ if (c2==75)
{
8
for(int i=1;i<=5;i++){
a1[i].x=2.5-0.5+(0.6*cos(phi*M_PI/180));
a2[i].x=2.5-0.5+(0.3*cos(phi*M_PI/180));
a1[i].y=2-0.5+(0.6*sin(phi*M_PI/180));
a2[i].y=2-0.5+(0.3*sin(phi*M_PI/180));
phi+=72; //moi lan quay goc thay doi 72 do(cai nay search
dc)
}}
vesao(RED);
delay(20);
vesao(GREEN);}
if (c2==77)
{
for(int i=1;i<=5;i++){
a1[i].x=2.5+0.5+(0.6*cos(phi*M_PI/180));
a2[i].x=2.5-0.5+(0.3*cos(phi*M_PI/180));
a1[i].y=2-0.5+(0.6*sin(phi*M_PI/180));
a2[i].y=2+0.5+(0.3*sin(phi*M_PI/180));
phi+=72;
//moi lan quay goc thay doi 72 do(cai nay search dc)
}}
vesao(RED);

delay(20);
vesao(GREEN);
if (c2==80)
{
for(int i=1;i<=5;i++){
a1[i].x=2.5+(0.6*cos(phi*M_PI/180));
a2[i].x=2.5-0.5+(0.3*cos(phi*M_PI/180));
a1[i].y=2-0.5+(0.6*sin(phi*M_PI/180));
a2[i].y=2+(0.3*sin(phi*M_PI/180));
phi+=72;


//moi lan quay goc thay doi 72 do(cai nay search dc)
}}
vesao(RED);
delay(20);
vesao(GREEN);
9
if(c2==27) break;

}
while (!kbhit());
}
getch();
}
closegraph();}
II. CHƯƠNG TRÌNH
1.Code
Trương trình dùng 4 phím di chuyển hình sao quay quanh tâm.
#include <stdlib.h>

#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <iostream>
#include<dos.h>
struct dinh{float x,y;} a1[10],a2[10]; //2 mang luu gia tri cac đỉnh trong va
ngoai tam giac
float xw1,yw1,xw2,yw2;
int xv1,yv1,yv2,xv2; float tlx,tly;
//cac cong cu ve 2d
void cuaso(float x1,float y1,float x2,float y2)
{ xw1=x1;yw1=y1;xw2=x2;yw2=y2; }
void khungnhin(int x1,int y1,int x2,int y2){
xv1=x1;yv1=y1;xv2=x2;yv2=y2;
tlx=(xv2-xv1)/(xw2-xw1); tly=(yv2-yv1)/(yw2-yw1);
}
void chuyenden(float x,float y){
int xm=(int)(tlx*(x-xw1)+xv1);
int ym=(int)(tly*(yw2-y)+yv1);
moveto(xm,ym);
}
void veden(float x,float y){
int xm=(int)(tlx*(x-xw1)+xv1);
int ym=(int)(tly*(yw2-y)+yv1);
10
lineto(xm,ym);
}
void vesao(int mt){
setcolor(mt); //ve ngoi sao, chu y a1 la mang cac dinh
ngoai ngoi sao

for(int i=1;i<=2;i++){
chuyenden(a1[i].x,a1[i].y);veden(a1[i+2].x,a1[i+2].y);
chuyenden(a1[i].x,a1[i].y);veden(a1[i+3].x,a1[i+3].y); }
chuyenden(a1[3].x,a1[3].y);veden(a1[5].x,a1[5].y);
}

int main()

{
int gd=0,gm;
initgraph(&gd,&gm,"");
cuaso(1,1,4,3);
setbkcolor(GREEN);
setcolor(RED);
khungnhin(120,100,520,380);
//tinh toan cac dinh cua ngoi sao de noi chung lai trong ham vesao
int phi=90;{

clearviewport();
char c1, c2; int i=1;
while (1) {

if (i==360) i=0;
else i++;

if (kbhit()) {
if ((c1=getch())==0)
c2 = getch();

{

for(int i=1;i<=5;i++){
a1[i].x=2.5-(0.6*cos(phi*M_PI/180));
a2[i].x=2.5+(0.3*cos(phi*M_PI/180));
11
a1[i].y=2+(0.6*sin(phi*M_PI/180));
a2[i].y=2-(0.3*sin(phi*M_PI/180));
phi+=72; //moi lan quay goc thay doi 72 do(cai nay search dc)



}
vesao(RED);
delay(200);
vesao(GREEN);

}
{
for(int i=1;i<=5;i++){
a1[i].x=2.5+(0.6*cos(phi*M_PI/180));
a2[i].x=2.5-(0.3*cos(phi*M_PI/180));
a1[i].y=2-(0.6*sin(phi*M_PI/180));
a2[i].y=2+(0.3*sin(phi*M_PI/180));
phi+=72; //moi lan quay goc thay doi 72 do(cai nay search dc)
}
vesao(RED);
delay(200);
vesao(GREEN);
}
}
}



}

getch();

closegraph();
}
2.Hình ảnh minh họa
12
Xuống
13
Trái
14
LỜI KẾT
Vận dụng những kiến thức đã học môn Đồ họa máy tính, chúng em đã xây
dựng được trương trình nay, tuy nó rất đơn gian nhưng phần nào đã giúp
chúng xem nắm vững kiến thức cần nhớ, và có thêm được vốn kiến thức,
cho những môn học tiếp theo, cũng như trong công việc sau này của bọn em.
Một lần nữa em xin chân thành cảm ơn cô, đã giúp đỡ chúng em hoàn thành
được bài tập này. Nhóm 2 chúng em còn nhiều thiếu xót cần mong cô xem
và bổ sung và góp ý cho bọn em để hoàn thiện bài làm của mình.
Chúng em xin chân thành cảm ơn!
15

×