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

Đề tài: Nghiên cứu các phép biến đổi hình học trong không gian ba chiều

19 2,4K 11

Đ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 19
Dung lượng 317 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lời nói đầuĐồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như các kĩ thuật cho phép tạo, hiển thị và điều khiển hình ảnh trên màn

Trang 1

Lời nói đầu

Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu

về cơ sở toán học, các thuật toán cũng như các kĩ thuật cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính Đồ họa máy tính liên quan ít nhiều đến một số lĩnh vực như đại số, hình học giải tích và hình học họa hình, quang học…… và kĩ thuật máy tính và đặc biệt là chế tạo phần cứng ( các loại màn hình, các thiết bị nhập xuất, các vi mạch đồ họa)

Nghiên cứu các phép biến đổi hình học trong không gian ba chiều là một trong những nội dung quan trọng

Do quá trình tìm hiểu còn nhiều thiếu sót nên chương trình còn nhiều hạn chế, nhóm thực hiện rất mong nhận được ý kiến đóng góp từ phía cô giáo và các bạn để phần mềm được hoàn thiện hơn

Hà Nội, ngày 26 tháng 2 năm 2013

Trang 2

MỤC LỤC

Trang 3

CHƯƠNG I: KHẢO SÁT

I Mục đích nghiên cứu

Vẽ khối cầu và lăng trụ trong không gian Hiện thị trên màn hình Vị trí quan sát xuất phát từ 1 điểm được gọi là phối cảnh

II Đối tượng nghiên cứu

Khối cầu và lăng trụ

III Hướng giải quyết

Quan sát các khối cầu và hình khối lăng trụ Từ đó chúng ta sẽ có cách nhìn thực tế của khối cầu và lăng trụ Tìm hiểu các phương trình của khối cầu Từ đó chúng ta sẽ vẽ đc nó như mong muốn

Trang 4

CHƯƠNG II: PHÂN TÍCH

I Hiểu về chiếu phối cảnh

Phép chiếu này cho hình ảnh giống như khi nhìn vật thể

Để tìm hình chiếu P’(x’,y’,z’) của P(x,y,z) ta nối P với mắt (tâm chiếu) .Giao điểm của đường này với mặt quan sát chính là P’

Giả sử P nằm trước mắt , tức là P.x < E

Phương trình của tia đi qua mắt và P là :

r(t)=(E,0,0).(1-t)+(x,y,z).t (*)

Trang 5

Giao điểm với mặt phẳng quan sát có thành phần x’=0.

Do thành phần x’ của tia r là E.(1-t) + x.t =0 nên t=1/(1-(x/E)) Thay t vào * ta tính được :

y’=y/(1-x/E) và z’=z/(1-x/E)

•Phếp chiếu phối cảnh không giữ nguyên hình dạng của vật thể

•Chỉ có những đường thẳng song song với mặt phẳng chiếu thì mới song song với nhau

•Phép chiếu phối cảnh được quy định bởi 5 biến :

-Hướng của mặt phẳng chiếu so với vật thể

-Độ cao của tâm chiếu so với vật thế

-Khoảnh cách từ tâm chiếu đến vật thể (R)

-Khoảng cách từ mặt phẳng chiếu đến tâm chiếu (D).

-Độ dịch chuyển ngang của tâm chiếu so với vật thể

Thuật toán cài đặt

void chieu3D_2D(float x, float y, float z, float &xp, float &yp) { if (phepchieu==1)

{ xp=d*x/z; yp=d*y/z;}

else { xp=x; yp=y;}

}

Trang 6

II Khối cầu

Chiều cao và rộng của khối cầu :

D1=200

D2 =100

D1=100

D2 =200

Trang 7

III Lăng trụ tam giác

Lăng trụ đứng

Lăng trụ nằm ngang

Trang 8

IV Lăng trụ tứ giác

Lăng trụ đứng

Lăng trụ nằm ngang

Trang 9

CHƯƠNG III Chương trình

#include<graphics.h>

#include<conio.h>

#include<math.h>

#include<iostream.h>

#include<stdio.h>

#define pi 3.14

float r, phi,teta, d, tlx, tly;

int phepchieu;

int xo, yo;

int xv1,xv2,yv1,yv2;

float xw1,yw1,xw2,yw2,tlx1,tly1;

/////////////////////////////////////////////////////////////

Trang 10

{ xw1=x1;

xw2=x2;

yw1=y1;

yw2=y2;

}

/////////////////////////////////////////////// ///////

void kn(int x1,int y1,int x2 ,int y2)

{ xv1=x1;

xv2=x2;

yv1=y1;

yv2=y2;

tlx1=(xw2-xw1)/(float)(xv2-xv1);

tly1=(yw2-yw1)/(float)(yv2-yv1);

}

//xây d?ng b? công c? 3D

//xây d?ng các th? t?c ph? tr?

void chuyenhqs(float x, float y, float z, float &x1, float &y1,float &z1) { x1=-x*sin(teta)+y*cos(teta);

y1=-x*cos(teta)*sin(phi)-y*sin(teta)*sin(phi)+z*cos(phi);

z1=-x*sin(teta)*cos(phi)-y*cos(teta)*sin(phi)-z*sin(phi)+r;

}

void chieu3D_2D(float x, float y, float z, float &xp, float &yp)

{ if (phepchieu==1)

{ xp=d*x/z; yp=d*y/z;}

else { xp=x; yp=y;}

}

void chuyenmh(float x, float y, int &xm, int &ym)

{ xm=(int)(tlx*x+xo);

ym=(int)(-tly*y+yo);

}

void chuyenden(float x, float y, float z)

Trang 11

int xm,ym;

chuyenhqs(x,y,z,x1,y1,z1);

chieu3D_2D(x1,y1,z1,xp,yp);

chuyenmh(xp,yp,xm,ym);

moveto(xm,ym);

}

void veden(float x, float y, float z)

{ float x1, y1, z1, xp, yp;

int xm,ym;

chuyenhqs(x,y,z,x1,y1,z1);

chieu3D_2D(x1,y1,z1,xp,yp);

chuyenmh(xp,yp,xm,ym);

lineto(xm,ym);}

//t?o các giá tr? m?c d?nh

void khoitaohqs()

{ r=10;d=5; phi=pi/5; teta=pi/4;

int i;

printf("Phep chieu (1-chieu phoi canh, 0-chieu song song) : "); scanf("%d",&i);

phepchieu=i;

tlx=70;tly=50;//t? l? phóng

xo=320; yo=240;//v? trí d?t g?c t?a d? trên màn hình

setcolor(14);

}

void truc()

{ setcolor(4);

chuyenden(0,0,0); veden(0,0,14);//v? t? di?m A7(0,0,0)->A2(0,0,1) chuyenden(0,0,0); veden(15,0,0);//v? t? di?m A7(0,0,0)->A6(1,0,0) chuyenden(0,0,0); veden(0,15,0);//v? t? di?m A7(0,0,0)->A8(0,1,0) setcolor(14);

}

/////////////////////////////////////////////////////

Trang 12

void langtrunam()

{

int n,x=0,y=5,z=5,x1=0,y1=0,z1=5,x2=0,y2=0,z2=5;

printf("Nhap vao so dinh o day lang tru : ");

scanf("%d",&n);

chuyenden(0,5,0);

int i=1;

while(i<n)

{

veden(x,y,z);

veden(x1,y1,z1);

chuyenden(x,y,z);

if(i%2==0)

{

x1=x1;

z1=z1-2;

}

else

{

x1=x1+4 ;

z1=z1-2;

}

if(i%2==0)

{

x=x;

z=z-2;

}

else

{

x=x+4 ;

z=z-2;

Trang 13

i++;

}

veden(0,5,0);

//day

veden(0,0,0);

i=1;

while(i<n)

{

veden(x2,y2,z2);

if(i%2==0)

{

x2=x2;

z2=z2-2;

}

else

{

x2=x2+4 ;

z2=z2-2;

}

i++;

}

veden(0,0,0);

getch();

}

//////////////////////////////////////////////////////////

void langtrudung()

{

int n,x=5,y=0,z=5,x1=5,y1=0,z1=0,x2=5,y2=0,z2=0;

printf("\nNhap vao so dinh o day lang tru : ");

scanf("%d",&n);

Trang 14

chuyenden(0,0,5);

while(i<n)

{

veden(x,y,z);

veden(x1,y1,z1);

chuyenden(x,y,z);

if(i%2==0)

{

y1=y1;

x1=x1-2;

}

else

{

y1=y1+4 ;

x1=x1-2;

}

if(i%2==0)

{

y=y;

x=x-2;

}

else

{

y=y+4 ;

x=x-2;

}

i++;

}

veden(0,0,5);

Trang 15

veden(0,0,0);

i=1;

while(i<n)

{

veden(x2,y2,z2);

if(i%2==0)

{

y2=y2;

x2=x2-2;

}

else

{

y2=y2+4 ;

x2=x2-2;

}

i++;

}

veden(0,0,0);

getch();

}

void E(int xc,int yc,int xradius,int yradius, int color)

{

int xcenter,ycenter;

xcenter=(int)(tlx1*(xc-xw1)+xv1);

ycenter=(int)(tly1*(yw2-yc)+yv1);

int x,y; float c,p;

x=0; y=yradius;

c=(float)yradius/xradius;

c=c*c; p=2*c-2*yradius+1;

while (c*x<=y)

{

putpixel(xcenter+x,ycenter+y,color);

Trang 16

putpixel(xcenter+x,ycenter-y,color);

putpixel(xcenter-x,ycenter-y,color);

if (p<0) p += 2*c*(2*x+3);

else

{

p +=4*(1-y)+2*c*(2*x+3);

y ;

}

x++;

}

y=0;x=xradius;

c= (float)xradius/yradius;

c=c*c; p=2*c-2*xradius+1;

while (c*y<=x)

{

putpixel(xcenter+x,ycenter+y,color);

putpixel(xcenter-x,ycenter+y,color);

putpixel(xcenter+x,ycenter-y,color);

putpixel(xcenter-x,ycenter-y,color);

if (p<0) p +=2*c*(2*y+3);

else

{

p +=4*(1-x)+2*c*(2*y+3);

x ;

}

y++;

}

}

void khoicau()

Trang 17

{ cs(-320,-240,320,240);

kn(0,0,640,480);

int x,y,dx,dy,dx1;

printf("Nhap chieu ngang chieu doc cua khoi cau : \n");

printf("D1: ");

scanf(" %d",&dx);

printf("D2: ");

scanf(" %d",&dy);

dx1=dx;

while(dx>=1)

{

E(0,0,dx,dy,14);

dx=dx-7;

}

while(dy>=1)

{

E(0,0,dx1,dy,14);

dy=dy-15;

}

getch();

}

int main()

{ int gd=0, gm=0;

int chon,chon1;

initgraph(&gd,&gm,"");

khoitaohqs();

do

{

system("cls");

Trang 18

printf("\n2 LANG TRU DUNG");

printf("\n3 LANG TRU NAM NGANG");

printf("\n4 THOAT");

printf("\nHay chon(1-4): ");

scanf("%d",&chon);

switch(chon)

{ case 1:

cleardevice();

khoicau();

break;

case 2:

cleardevice();

// truc();

langtrudung();

break;

case 3:

cleardevice();

//truc();

langtrunam();

break;

case 4:

exit(0);

break;

default:

printf("\nBan chon SAI");

getch();

}

}while(chon!=4);

}

Ngày đăng: 21/11/2014, 00:44

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w