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

code_ đồ họa máy tính_bản chuẩn

43 6,4K 35
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Code Đồ Họa Máy Tính Bản Chuẩn
Trường học University of Information Technology
Chuyên ngành Computer Graphics
Thể loại Thư Viện
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 43
Dung lượng 139 KB

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

Nội dung

tổng hợp code đồ họa máy tính cho sinh viên

Trang 1

Int color = RED;

Void DDA_line(int x1,int y1,int x2,int y2)

int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI");

setbkcolor(GREEN); int xA,xB,yB,yA;

cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; //50

Trang 2

1.1 Cho điểm A có tọa độ (100,50) và điểm B có tọa độ (200,130).

- Trình bày thuật toán ĐA tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc 0<|m|<1)

- Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ

- Viết hàm main() để kiểm nghiệm

#define Round(a) long(a+0 005) // lam tron so

void ĐĂint x1, int y1, int x2, int y2, int C)

{ int x,y,dx,dy;

Randomize();

y=y1; dx = x2 - x1; dy = y2 - y1;

float m = float (y2 - y1)/(x2 - x1);

//Ve doan thang co HSG 0<m<1

Trang 3

1 2Cho điểm A có tọa độ (50,100) và điểm B có tọa độ (130,200).

- Trình bày thuật toán ĐA tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc |m|≥1)

- Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ

Viết hàm main() để kiểm nghiệm

#define Round(a) long(a+0 005)

void ĐĂint x1, int y1, int x2, int y2, int C)

{ int x,y,dx,dy;

Randomize();

y=y1; dx = x2 - x1; dy = y2 - y1;

float m = float (y2 - y1)/(x2 - x1);

//Ve doan thang co HSG |m|>=1

Trang 4

- Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán ĐA ứng với trường hợp hệ số góc m của đườngthẳng đi qua A, B thỏa mãn |m|≥1.

- Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với |m|≥1

- Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB với màu vừa nhập

#include <coniọh> #include <graphics.h> #include <math.h>

#include <iostream.h> #include <stdiọh> #include <math.h>

#define round(a) long(a+0 005)

void ĐĂint x1, int y1, int x2, int y2, int C)

{ int x,y,dx,dy;

y=y1; dx = x2 - x1; dy = y2 - y1;

float m = float (y2 - y1)/(x2 - x1);

//Ve doan thang co HSG |m|>=1

Trang 5

- Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán ĐA ứng với trường hợp hệ số góc m của đườngthẳng đi qua A, B thỏa mãn 0<|m|<1.

- Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với 0<|m|

<1

- Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB

#include <coniọh> #include <graphics.h> #include <math.h>

#include <iostream.h> #include <stdiọh> #include <math.h>

#define round(a) long(a+0 005)

void ĐĂint x1, int y1, int x2, int y2, int C)

{ int x,y,dx,dy;

y=y1; dx = x2 - x1; dy = y2 - y1;

float m = float (y2 - y1)/(x2 - x1);

//Ve doan thang co HSG 0<m<1

Trang 6

BR_ line // trường hợp tổng quát k theo m

#include <conio.h> #include <graphics.h> #include <math.h>

#include <iostream.h> #include <stdio.h> #include <math.h>

#define Round(a) long(a+0 005) // lam tron so

void Bre_line(int x1, int y1, int x2, int y2, int color)

{ int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI");

setbkcolor(GREEN); int xA,xB,yB,yA;

cout<<"nhap diem A\n ";

Trang 7

1.5 Cho điểm A có tọa độ (100,50) và điểm B có tọa độ (200,130).

- Trình bày thuật toán Bresenham tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc 0<|m|

<1)

- Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB

- Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ

- Viết hàm main() để kiểm nghiệm

#include <conio.h> #include <graphics.h> #include <math.h>

#include <iostream.h> #include <stdio.h> #include <math.h>

#define Round(a) long(a+0 005)

void Bre_line(int x1, int y1, int x2, int y2, int color)

Trang 8

1.6 Cho điểm A có tọa độ (50,100) và điểm B có tọa độ (130,200).

- Trình bày thuật toán Bresenham tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc |m|≥1)

- Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB

- Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ

- Viết hàm main() để kiểm nghiệm

#include <conio.h> #include <graphics.h> #include <math.h>

#include <iostream.h> #include <stdio.h> #include <math.h>

#define Round(a) long(a+0 005)

void Bre_line(int x1, int y1, int x2, int y2, int color)

Trang 9

1 7 Viết chương trình gồm:

- Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán Bresenham ứng với trường hợp hệ số góc m củađường thẳng đi qua A, B thỏa mãn |m|≥1

- Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với |m|≥1

- Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB với màu vừa nhập

#include <conio.h> #include <graphics.h> #include <math.h>

#include <iostream.h> #include <stdio.h> #include <math.h>

#define Round(a) long(a+0 005)

void Bre_line(int x1, int y1, int x2, int y2, int color)

Trang 10

- Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán Bresenham ứng với trường hợp hệ số góc m củađường thẳng đi qua A, B thỏa mãn 0<|m|<1.

- Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với 0<|m|

<1

- Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB

#include <conio.h>#include <graphics.h>#include <math.h>

#include <iostream.h>#include <stdio.h>#include <math.h>

#define Round(a) long(a+0 005)

void Bre_line(int x1, int y1, int x2, int y2, int color)

{ int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI");

setbkcolor(GREEN); int xA,xB,yB,yA, mt;

cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; //100

Trang 11

MID_line // trường hợp tổng quát k theo m

1 9 Cho điểm A có tọa độ (100,50) và điểm B có tọa độ (200,130)

- Trình bày thuật toán Midpoint tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc 0<|m|<1)

- Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB

- Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ

Viết hàm main() để kiểm nghiệm

#include <conio.h>#include <graphics.h>#include <math.h>

#include <iostream.h>#include <stdio.h>#include <math.h>

#define Round(a) long(a+0 005)

void Mid(int x1, int y1, int x2, int y2, int color)

{ int x,y,dx,dy,d;

y=y1; dx = x2 - x1; dy = y2 - y1; d=dy-dx/2;

// Khoi tao cac gia tri ban dau

1 10 Cho điểm A có tọa độ (50,100) và điểm B có tọa độ (130,200)

- Trình bày thuật toán Midpoint tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc |m|≥1)

Trang 12

- Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB

- Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ

- Viết hàm main() để kiểm nghiệm

#include <conio.h>#include <graphics.h>#include <math.h>

#include <iostream.h>#include <stdio.h>#include <math.h>

void Mid(int x1, int y1, int x2, int y2, int color)

{ int x,y,dx,dy,d;

y=y1; dx = x2 - x1; dy = y2 - y1; d=dy-dx/2;

// ve duong thang voi m>1

Trang 13

1 11 Viết chương trình gồm:

- Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán Midpoint ứng với trường hợp hệ số góc m củađường thẳng đi qua A, B thỏa mãn |m|≥1

- Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với |m|≥1

- Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB với màu vừa nhập

#include <conio.h>#include <graphics.h>#include <math.h>

#include <iostream.h>#include <stdio.h>#include <math.h>

void Mid(int x1, int y1, int x2, int y2, int color)

{ int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI");

setbkcolor(GREEN); int xA,xB,yB,yA, mt;

cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; //50

Trang 14

- Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với 0<|m|

<1

- Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB

#include <conio.h>#include <graphics.h>#include <math.h>

#include <iostream.h>#include <stdio.h>#include <math.h>

#define Round(a) long(a+0 005)

void Mid(int x1, int y1, int x2, int y2, int color)

{ int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI");

setbkcolor(GREEN); int xA,xB,yB,yA, mt;

cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; //100

- Trình bày thuật toán Breseham để vẽ cung số 1 của đường tròn

- Tính tọa độ của 25 điểm đầu tiên khi vẽ cung tròn này

Trang 15

- Viết hàm tương ứng để vẽ cung tròn với màu bất kỳ và chương trình kiểm nghiệm (với màu nét vẽ, tọa độtâm và bán kính đường tròn nhập từ bàn phím)

#include <graphics.h>#include <conio.h>

void Bresenham_Circle(int xc, int yc, int Radius, int color)

17(66,30.79), 18(67,31.67),19(68,32.65), 20(69,33.75), 21(70,35), 22(71,36.44), 23(72,38.16), 24(73,40.2), 25(74,43)

2 1

- Trình bày thuật toán Midpoint để vẽ cung số 1 của đường tròn

- Tính tọa độ của 25 điểm đầu tiên khi vẽ cung tròn này

Trang 16

- Viết hàm tương ứng để vẽ cung tròn với màu bất kỳ và chương trình kiểm nghiệm (với màu nét vẽ, tọa độtâm và bán kính đường tròn nhập từ bàn phím)

#include <graphics.h>#include <conio.h>

void CircleMidPoint (int xc, int yc,int R, int color)

{ int gr_drive = DETECT, gr_mode;

initgraph(&gr_drive, &gr_mode, "C://TC//BGI");

17(66,30.79), 18(67,31.67),19(68,32.65), 20(69,33.75), 21(70,35), 22(71,36.44), 23(72,38.16), 24(73,40.2), 25(74,43)

3.1Trình bày thuật toán Breseham để vẽ cung số 1 của Elip

- Tính tọa độ của 25 điểm đầu tiên khi vẽ cung Elip này

Trang 17

- Viết hàm tương ứng để vẽ cung Elip với màu bất kỳ và chương trình kiểm nghiệm (với màu nét vẽ, tọa độtâm và các bán trục Elip nhập từ bàn phím)

#include<graphics.h> #include <conio.h>

void BR_ellipse(int xcenter,int ycenter,int xradius,int yradius, int color)

{ int x,y; float c,p;

x=0; y=yradius; c=(float)yradius/xradius; c=c*c; p=2*c-2*yradius+1;

{ int gr_drive = DETECT, gr_mode; initgraph(&gr_drive, &gr_mode, "C://TC//BGI");

BR_ellipse (getmaxx() / 2, getmaxy() / 2, 150, 80, 4);

getch(); closegraph(); }

3.2Trình bày thuật toán Midpoint để vẽ cung số 1 của đường Elip

- Tính tọa độ của 25 điểm đầu tiên khi vẽ cung Elip này

Trang 18

- Viết hàm tương ứng để vẽ cung Elip với màu bất kỳ và chương trình kiểm nghiệm (với màu nét vẽ, tọa độtâm và các bán trục Elip nhập từ bàn phím)

#include<graphics.h>#include <conio.h>

#define ROUND(a) ((long)(a+0.5))

void plot(int xc, int yc, int x, int y, int color)

{ putpixel(xc+x, yc+y, color);

putpixel(xc-x, yc+y, color);

putpixel(xc+x, yc-y, color);

putpixel(xc-x, yc-y, color);

}

void Mid_ellipse(int xc, int yc, int a, int b, int color){

long x, y, fx, fy, a2, b2, p;

Trang 19

1 Tô màu đường biên:

Bắt đầu tù 1 điểm (x,y) trong vùng cần đk tô màu

- Xác định màu điểm : getpixel(x,y,c)

- Tô màu putpixel(x,y,c)

Kiểm tra thuộc tính màu các điểm lân cận

- Điểm lân cận đã tô màu : exit

- Trùng với màu đường biên : exit

- Nếu không thì tô màu

Các phương pháp xác định điểm lân cận

Trang 20

2 Giải thuật dòng quét(scanline)

- Giải thuật dừa trên ý tưởng sử dụng 1 đường quét trên trục ycuar màn hình đi từ y_max đến y_min của vùng cần đk tô màu

- Với mỗi giá trị y=yi đường thẳng quét cắt các đường biên của vùng cần tô tọa ra đoạn thẳng y=yi với x thuộc[x_min,x_max] Trên đoạn thẳng đó chúng ta tô màu các điểm tương ứng đi từ x_min đến x_max có các điểm tô (xi,yi) thuộc y=yi

Trang 21

Dòng quét đa giác :

- Vùn tô đk xác định bởi 1 đa giác n đỉnh : Pi(xi,yi), i=0…n-1

- Ý tưởng thuật toán:

• Tìm giá trị y_top và y_bottom của đa giác

• Y_top = max(yi với (xi,yi)thuộc P)

• Y_bottom = min(yi với (xi,yi)thuộc P)

• Với mỗi dòng quét ngang y=k, k từ y_bottom -> y_top

- tìm tất cả các hoàng độ giao điểm với các cạnh đa giác

- sắp xếp theo thứ tự tăng dần x0,x1,x2…

- tô màu các đoạn thẳng trên đường y=k nằm trong các đoạn (x0,x1),(x2,x3),…(x2i,x2i+1)

Trang 22

3 Tô loang

- B1:khởi tọa 1 điểm nằm trong vùng tô

- B2:thực hiện tô loang dần theo chiều ngang(trái qua phải và phải qua trái) cho đến khi đụng biên thì dừnglại

- B3:ứng với mỗi điểm trên dòng quét ngang, thực hiện loang để tìm những điểm ảnh có hoành độ nhỏ nhấtsát với biên chưa đk tô nằm trên và dưới , sau đó lưu vào stack

- B4:lặp lại B2 nếu còn 1 điểm trong stack chưa đk tô

Trang 23

5.không gian 2D

5.2 Trên mặt phẳng tọa độ thực Oxy, cho hàm số y=2x+3 Giả sử cần vẽ đồ thị của hàm số trên đoạn 5,5] lên màn hình với khung nhìn (50,10)x(120,70)

[ Hãy tính tọa độ của gốc tọa độ O trên màn hình trong trường hợp này

- Vẽ đồ thị hàm số trên cùng với hệ trục tọa độ Oxy

-#include "iostream.h" -#include "stdio.h" -#include "conio.h"

#include "graphics.h" #include "dos.h" #include "math.h"

int xv1,yv1,xv2,yv2,xw1,xw2,yw1,yw2; // cac toa cua cua cua so va khung nhin

Trang 24

cuaso(-pi,-1.5,pi*3,1.5); // tao cua so hien thi anh thuc

khungnhin(50,10,120,70); // khung nhin tren man hinh

Trang 26

void clipline(double x1, double y1, double x2, double y2,

double xmin, double ymin, double xmax, double ymax)

if (cliptest(-dx, x1 - xmin, &u1, &u2))

if (cliptest(dx, xmax-x1, &u1, &u2))

{

dy = y2 - y1;

if (cliptest(-dy, y1 - ymin, &u1, &u2))

if (cliptest(dy, ymax - y1, &u1, &u2))

{

if (u2 < 1.0)

{x2 = x1 + u2 * dx;

y2 = y1 + u2 * dy;

}

if (u1 > 0.0)

{x1 += u1 * dx;

y1 += u1 * dy;

}setcolor(RED);

Trang 27

line(oldx1, oldy1, x1, y1);

line(x2, y2, oldx2, oldy2);

double x1, y1, x2, y2;

initgraph(&gr_drive, &gr_mode, "C:\\TC\\BGI");

rectangle(100,50, getmaxx()-100, getmaxy()-50); randomize();

outtextxy(100, getmaxy()-10, "Nhan phim bat ky de sinh duong khac; ESC de thoat");

do {

x1 = random(getmaxx() / 2);

y1 = random(getmaxy());

x2 = getmaxx()/2 + random(getmaxx() / 2); y2 = random(getmaxy());

clipline(x1, y1, x2, y2, 100, 50, getmaxx()-100, getmaxy()-50);

c = getch();

} while (c != 27);

closegraph();

}

Trang 29

p += 2*Dy;

else{

p += 2*(Dy - Dx);

y1 ++;

}x1 ++;

putpixel(x1,y1,c);

delay(10);

}}

Trang 30

p += 2*Dx;

else{

p += 2*(Dx - Dy);

x1 ++;

}y1 ++;

putpixel(x1,y1,c);

delay(10);

}}

p += 2*(Dy + Dx);

y1 ;}x1 ++;

Trang 31

if(p < 0){

p=p - 2*Dy - 2*Dx;

y1 ++;

}else

Trang 34

p.x =int( getmaxx()/2+y - x*cos(RADS*45));

p.y =int( getmaxy()/2 + x*cos(RADS*45));

Trang 36

printf("\nQuay quanh truc : oy goc 45");

printf("\nQuay quanh truc : ox goc 35.5");

for( i = 0 ; i< 4 ; i++)

break;

}case '2' :

{

Trang 37

break;

}case '3' :

{chieumat(c,3,9) ;break;

}}

}

while( m !='4');

closegraph();

}

Trang 39

initgraph(&mh,&mode,"C://TC//BGI");

// ve duong sin

cuaso(-pi,-1.5,pi*3,1.5); // tao cua so hien thi anh thuc

khungnhin(240,140,390,240); // khung nhin tren man hinh

Trang 42

printf("khong the khoi dong do hoa \n");

printf("ma loi : %d \nnguyen nhan loi %s ",maloi, grapherrormsg(maloi) );

delay(200); // t?m d?ng 200 mili giây (hàm này trong thu vi?n dos.h)

}while (!kbhit()); // l?p vô h?n t?i khi ?n m?t phím b?t k? thì d?ng

getch();

closegraph();

}

Ngày đăng: 11/06/2014, 20:10

TỪ KHÓA LIÊN QUAN

w