1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

15 3,6K 32

Đ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

Thông tin cơ bản

Định dạng
Số trang 15
Dung lượng 184,48 KB

Nội dung

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

Trang 1

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

2. Đinh Thị Như Hương

3. Nguyễn Thị Sim

Trang 2

MỤC LỤC

Trang 3

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 tìm hiểu sâu hơn môn học đồ họa máy tính này Qua thời gian tì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 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!

Trang 4

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 72o

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

Trang 5

- 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){

Trang 6

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()

Trang 7

{

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));

Trang 8

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) {

Trang 9

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);

Trang 10

if(c2==27) break;

} while (!kbhit());

} getch();

} closegraph();}

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);

Trang 11

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));

Trang 12

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

Trang 13

Xuống

Trang 14

Trái

Trang 15

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!

Ngày đăng: 06/11/2014, 00:59

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w