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

báo cáo bài tập lớn i kỹ thuật lập trình chủ đề 1 đồ họa trong c

18 1 0
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

Định dạng
Số trang 18
Dung lượng 3,97 MB

Nội dung

Khái niệmĐồ họa trong ngôn ngữ lập trình C đề cập đến việc sử dụng các hàm vàthư viện đồ họa để tạo ra các đối tượng hình ảnh, vẽ các đồ thị, hiển thịcác màn hình và thao tác với các đối

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

KHOA TOÁN - TIN

- -BÁO CÁO BÀI TẬP LỚN I

Môn học: Kỹ thuật lập trình Chủ đề 1: Đồ họa trong C

Giáo viên hướng dẫn: TS Nguyễn Thị Thanh Huyền Sinh viên thực hiện: Lê Thanh Thảo

Mã số sinh viên: 20227152

Email: Thao.LT227152@sis.hust.edu.vn

Lớp: Toán Tin 02 K67

Trang 2

I Khái niệm

Đồ họa trong ngôn ngữ lập trình C đề cập đến việc sử dụng các hàm và thư viện đồ họa để tạo ra các đối tượng hình ảnh, vẽ các đồ thị, hiển thị các màn hình và thao tác với các đối tượng đồ họa trên màn hình Dưới đây là một số khái niệm và định nghĩa quan trọng trong đồ họa C:

1 Điểm ảnh (Pixel): Đơn vị nhỏ nhất tạo nên một hình ảnh trên màn

hình Mỗi điểm ảnh có một vị trí cụ thể trên màn hình và được xác định bởi tọa độ (x, y)

2 Tọa độ: Hệ tọa độ được sử dụng để xác định vị trí của các đối

tượng đồ họa trên màn hình Tọa độ (0, 0) thường được đặt ở góc trên bên trái của màn hình

3 Màu sắc: Trong đồ họa C, màu sắc được biểu diễn dưới dạng các

giá trị số cho các thành phần màu (như RGB hoặc CMYK)

4 Đồ thị: Biểu đồ hình học đại diện cho các quan hệ hoặc dữ liệu

bằng cách sử dụng các đường và điểm

5 Hình dạng cơ bản: Các đối tượng đồ họa cơ bản như đường

thẳng, hình chữ nhật, hình tròn và hình đa giác được tạo ra và vẽ trên màn hình bằng các hàm đồ họa

6 Thư viện đồ họa: Các thư viện đồ họa như Graphics.h, OpenGL

và DirectX cung cấp các hàm và cấu trúc dữ liệu để tạo ra các đối tượng đồ họa và thao tác với chúng

7 Xử lý sự kiện: Xử lý các sự kiện nhập từ bàn phím, chuột hoặc các

thiết bị đầu vào khác để tương tác với các đối tượng đồ họa Đây là một số khái niệm cơ bản về đồ họa trong ngôn ngữ lập trình C Việc sử dụng các hàm và thư viện đồ họa cho phép các lập trình viên tạo

ra các ứng dụng đồ họa, trò chơi và giao diện người dùng hấp dẫn

II Các hàm và thư viện đồ họa trong C

Trong ngôn ngữ lập trình C, có nhiều thư viện và hàm đồ họa khác nhau Dưới đây là tổng hợp các thư viện và hàm đồ họa trong C:

1 Thư viện Graphics.h

a Giới thiệu:

Thư viện Graphics.h là thư viện đồ họa tiêu chuẩn trong C, tuy nhiên không phải là một phần của thư viện tiêu chuẩn C Thư viện graphics.h được sử dụng rộng rãi trong các ứng dụng và bài toán liên quan đến đồ họa 2D cơ bản như:

Trang 3

Vẽ các hình dạng cơ bản (đường thẳng, hình chữ nhật, hình tròn, hình ellipse, đa giác); Thay đổi màu sắc, kích thước và vị trí của các hình dạng

Tạo ra các trò chơi 2D đơn giản (Snake, Tetris, Pong, v.v.); Vẽ màn hình trò chơi, di chuyển các đối tượng, xử lý va chạm; Xử lý đầu vào từ người dùng (bàn phím, chuột) để điều khiển trò chơi

Vẽ các biểu đồ đơn giản (đường, cột, tròn, v.v.); Biểu diễn dữ liệu theo các hình dạng và màu sắc khác nhau; Tạo ra đồ thị cho các thuật toán như Đường đi ngắn nhất, Cây khung nhỏ nhất, v.v Ngoài ra, việc ứng dụng thư viện graphics.h còn được ứng dụng vào các bài toán trực quan hóa trong giáo dục (minh họa các thuật toán và cấu trúc dữ liệu, các nguyên lý vật lý, toán học, v.v.), mô phỏng và dữ liệu ảo (các thuật toán và mô hình toán học), các ứng dụng đồ họa đơn giản

b Một số hàm phổ biến:

initgraph(): Khởi tạo môi trường đồ họa, cần gọi trước khi sử dụng các hàm khác

closegraph(): Đóng môi trường đồ họa, thực hiện sau khi sử dụng các hàm cần thiết trong thư viện

Trong hàm initgraph(&gd, &gm, ""), vị trí của chuỗi trong cặp dấu ngoặc kép được sử dụng để chỉ định trình điều khiển đồ họa (graphics driver) Ví dụ, để sử dụng trình điều khiển VGAHI (Video Graphics High Interface), có thể viết: initgraph(&gd, &gm, "VGAHI"); Tuy nhiên, trong hầu hết các trường hợp, việc sử dụng chuỗi rỗng "" cho phép initgraph tự động phát hiện trình điều khiển là lựa chọn an toàn nhất line(x1, y1, x2, y2): Vẽ một đường thẳng từ điểm (x1, y1) đến điểm (x2, y2)

rectangle(x1, y1, x2, y2): Vẽ một hình chữ nhật với góc trên bên trái tại (x1, y1) và góc dưới bên phải tại (x2, y2)

circle(x, y, radius): Vẽ một hình tròn với tâm tại (x, y) và bán kính

là radius

Trang 4

putpixel(x, y, color): Đặt một điểm ảnh với màu color tại tọa độ (x, y)

setcolor(color): Đặt màu hiện tại cho các hàm vẽ tiếp theo Với “color” được thể hiện bằng các mã như trong bảng dưới đây:

c Một số chương trình ví dụ:

Chương trình vẽ một hình chữ nhật màu đỏ và một đường chéo màu xanh:

Trang 5

Chương trình vẽ một hình tròn màu xanh lá và vẽ 1 điểm ảnh (với màu được chọn trong 16 màu đầu tiên trong bảng màu):

Trang 6

2 Thư viện OpenGL (Open Graphics Library):

a Giới thiệu:

Thư viện OpenGL (Open Graphics Library) là một thư viện đồ họa mạnh

mẽ và đa nền tảng, hỗ trợ đồ họa 2D và 3D OpenGL cung cấp một tập hợp các hàm và công cụ để tạo ra các ứng dụng đồ họa phức tạp và hiệu năng cao Thư viện này được sử dụng rộng rãi trong các lĩnh vực như:

Trang 7

Trò chơi: Xây dựng các trò chơi 3D với đồ họa chất lượng cao, hiệu ứng đặc biệt, ánh sáng và vật liệu

Khoa học và kỹ thuật: Mô phỏng và trực quan hóa dữ liệu trong các lĩnh vực như vật lý, hóa học, y tế, kỹ thuật

Giáo dục: Tạo các ứng dụng giáo dục tương tác với đồ họa 3D, mô phỏng môi trường ảo

Thiết kế và xây dựng: Mô phỏng và trực quan hóa các thiết kế kiến trúc, kỹ thuật

Ngoài ra, OpenGL thường được sử dụng kết hợp với các thư viện hỗ trợ khác như GLUT (OpenGL Utility Toolkit) hoặc SDL (Simple DirectMedia Layer) để tạo cửa sổ và xử lý sự kiện người dùng OpenGL

là một thư viện đồ họa khá phức tạp và yêu cầu kiến thức sâu về lập trình

đồ họa Tuy nhiên, với khả năng mạnh mẽ của nó, OpenGL là một lựa chọn tuyệt vời cho việc xây dựng các ứng dụng đồ họa 3D chuyên nghiệp

b Một số hàm phổ biến:

glBegin() và glEnd(): Đánh dấu đầu và cuối của một đối tượng đồ họa

glVertex(): Định nghĩa các đỉnh của một đối tượng đồ họa

glColor(): Đặt màu sắc cho các đối tượng đồ họa

glClear(): Xóa màn hình hoặc bộ nhớ đệm

glLoadIdentity(): Đặt ma trận hiện tại thành ma trận đơn vị glTranslate(), glRotate(), glScale(): Thực hiện các phép biến đổi tịnh tiến, xoay và tỷ lệ trên đối tượng đồ họa

glLight(), glMaterial(): Thiết lập ánh sáng và vật liệu cho các đối tượng 3D

c Một số chương trình ví dụ:

Trang 8

3 Thư viện SDL (Simple DirectMedia Layer):

a Giới thiệu:

Thư viện SDL (Simple DirectMedia Layer) là một thư viện đồ họa đa nền tảng, mã nguồn mở, hỗ trợ đồ họa 2D và xử lý sự kiện SDL cung cấp một tập hợp các API đơn giản và hiệu quả để tạo ra các ứng dụng đa

Trang 9

phương tiện, chủ yếu là trong lĩnh vực phát triển trò chơi Thư viện này được sử dụng rộng rãi trong các lĩnh vực như:

Trò chơi: Xây dựng các trò chơi 2D với đồ họa, âm thanh và xử lý đầu vào từ người dùng

Ứng dụng đa phương tiện: Tạo các ứng dụng đa phương tiện tương tác, như phát video, phát nhạc, trình chiếu multimedia

Ứng dụng đồ họa: Tạo các ứng dụng đồ họa 2D, vẽ hình ảnh, xử lý

đồ họa vector, v.v

Mô phỏng và trực quan hóa: Mô phỏng và trực quan hóa các hệ thống, mô hình toán học hoặc dữ liệu trong lĩnh vực khoa học và

kỹ thuật

Sử dụng SDL có thể tạo cửa sổ, xử lý đầu vào từ bàn phím, chuột và các thiết bị khác, vẽ hình ảnh và đối tượng đồ họa 2D, phát âm thanh và nhạc, quản lý thời gian và nhiều tính năng khác SDL cũng hỗ trợ nhiều định dạng đa phương tiện phổ biến như PNG, JPEG, WAV, MP3, v.v SDL được coi là một thư viện đồ họa đơn giản, nhẹ và dễ sử dụng, đặc biệt phù hợp cho việc phát triển trò chơi và ứng dụng đa phương tiện

b Một số hàm phổ biến:

SDL_Init(): Khởi tạo thư viện SDL và các phần con của nó SDL_CreateWindow(): Tạo một cửa sổ mới cho ứng dụng SDL SDL_PollEvent(): Kiểm tra và lấy sự kiện từ hàng đợi sự kiện SDL_RenderCopy(): Sao chép một vùng hình ảnh vào trên đích đã đựơc kết xuất

SDL_RenderPresent(): Cập nhật toàn bộ hình ảnh đã kết xuất lên màn hình

SDL_Quit(): Dọn dẹp và thoát khỏi SDL

c Một số chương trình ví dụ:

Trang 10

4 Một số thư viện khác:

Đây là một số thư viện đồ họa ít phổ biến hơn trong ngôn ngữ lập trình C:

Thư viện Cairo

Thư viện GD (GD Graphics Library)

Thư viện FreeGLUT (Free OpenGL Utility Toolkit)

Thư viện Allegro

5 Tổng kết:

graphics.h - Đơn giản, dễ sử

dụng cho những

ứng dụng đồ họa cơ

- Chỉ hỗ trợ chế độ

đồ họa cơ bản với độ phân giải thấp

Phù hợp cho việc học tập

và làm quen

Trang 11

- Được tích hợp sẵn

trong nhiều môi

trường lập trình

như Turbo C,

Dev-C++

- Phù hợp cho việc

học tập và làm quen

với lập trình đồ

họa

- Không hỗ trợ các tính năng đồ họa nâng cao như 3D, GPU acceleration, shaders, vv

- Không đa nền tảng, chỉ hoạt động trên môi trường Windows

với lập trình

đồ họa cơ bản, những ứng dụng đơn giản không đòi hỏi đồ họa phức tạp

SDL

(Simple

DirectMedia

Layer)

- Đa nền tảng, hỗ

trợ nhiều hệ điều

hành khác nhau

- Hỗ trợ nhiều tính

năng như đồ họa

2D, âm thanh, lập

trình mạng, xử lý

sự kiện, vv

- Cung cấp giao

diện lập trình ứng

dụng (API)

- Phổ biến, có nhiều

tài nguyên hỗ trợ

- Không hỗ trợ đồ họa 3D nâng cao, cần kết hợp với các thư viện khác như OpenGL hoặc Vulkan

- Hiệu suất đồ họa có thể không cao như các thư viện đồ họa chuyên dụng khác

Phù hợp cho việc phát triển ứng dụng đa nền tảng, đồ họa 2D, trò chơi đơn giản hoặc bất kỳ ứng dụng nào cần đồ họa và

xử lý sự kiện

OpenGL

(Open

Graphics

Library)

- Đa nền tảng, hỗ

trợ nhiều hệ điều

hành

- Phổ biến, có nhiều

tài nguyên hỗ trợ

- Hiệu suất đồ họa

cao, phù hợp cho

các ứng dụng đòi

hỏi đồ họa nặng

- Phức tạp

- Không cung cấp giao diện lập trình ứng dụng (API) cho

xử lý âm thanh, sự kiện, vv

- Cần kết hợp với các thư viện khác để

xử lý các tính năng khác ngoài đồ họa

Phù hợp cho việc phát triển trò chơi 3D, mô phỏng, vv với yêu cầu

về đồ họa cao

và hiệu suất tối ưu

Kết luận: graphics.h phù hợp cho việc học tập và ứng dụng đồ họa cơ bản, SDL là lựa chọn tốt cho đồ họa 2D và xử lý sự kiện trên nhiều nền tảng, còn OpenGL là thư viện mạnh mẽ cho đồ họa 3D nâng cao và hiệu suất cao Lựa chọn thư viện nào phụ thuộc vào yêu cầu cụ thể của dự án

và mức độ phức tạp của ứng dụng đồ họa

Trang 12

III Một số bài toán cụ thể sử dụng đồ họa trong C

1 Vẽ hình học cơ bản (mặt cười) (Sử dụng thư viện graphics.h)

Trong ví dụ trên, chúng ta sử dụng initgraph() để khởi tạo môi trường đồ họa, setcolor() để đặt màu cho các hình vẽ, circle() để vẽ mặt tròn và mắt, arc() để vẽ miệng cười (hình cung tròn) Cuối cùng, getch() để đợi người dùng nhấn một phím trước khi đóng cửa sổ đồ họa bằng closegraph()

2 Vẽ biểu đồ (hình tròn và hình cột) (Sử dụng thư viện graphics.h)

Giải thích chương trình:

Hàm drawPieChart (vẽ biểu đồ hình tròn) nhận tọa độ tâm, bán kính, mảng dữ liệu và số lượng dữ liệu Hàm này vẽ các phần tử của biểu đồ hình tròn bằng cách sử dụng hàm pieslice của thư viện graphics.h Góc bắt đầu và kết thúc của mỗi phần tử được tính dựa trên tỷ lệ phần trăm của dữ liệu

Hàm drawBarChart (vẽ biểu đồ hình cột) nhận tọa độ xuất phát, chiều rộng và chiều cao của khu vực vẽ, mảng dữ liệu và số lượng

dữ liệu Hàm này vẽ các cột của biểu đồ hình cột bằng cách sử dụng hàm bar của thư viện graphics.h Chiều cao của mỗi cột được tính dựa trên giá trị dữ liệu và giá trị lớn nhất trong mảng dữ liệu Trong hàm main, chúng ta khởi tạo đồ họa bằng cách gọi initgraph

Trang 13

Chúng ta khai báo hai mảng dữ liệu, một cho biểu đồ hình tròn và một cho biểu đồ hình cột

Gọi hàm drawPieChart để vẽ biểu đồ hình tròn, và gọi hàm drawBarChart để vẽ biểu đồ hình cột

Đóng đồ họa bằng closegraph và kết thúc

Trang 14

3 Animation cơ bản (trái tim to nhỏ) (Sử dụng thư viện graphics.h)

Cách chương trình hoạt động:

Trang 15

Chương trình khai báo một hàm drawHeart(x, y, r) để vẽ hình trái tim với tâm tại tọa độ (x, y) và bán kính r

Trong hàm main(), chương trình khởi tạo đồ họa bằng cách gọi initgraph()

Chương trình xác định tọa độ tâm trái tim (x, y) và bán kính ban đầu r của trái tim

Chương trình vào một vòng lặp vô hạn, trong đó:

- Xóa màn hình bằng cleardevice()

- Vẽ trái tim bằng cách gọi drawHeart(x, y, r)

- Delay một khoảng thời gian nhỏ để tạo hiệu ứng animation

- Thay đổi bán kính r để phóng to hoặc thu nhỏ trái tim

- Nếu bán kính đạt đến giá trị lớn nhất (r >= 100), đổi hướng thành thu nhỏ

- Nếu bán kính đạt đến giá trị nhỏ nhất (r <= 25), đổi hướng thành phóng to

Vòng lặp sẽ tiếp tục cho đến khi người dùng nhấn một phím bất kỳ Cuối cùng, chương trình đợi người dùng nhấn phím để tiếp tục, đóng đồ họa bằng closegraph() và kết thúc

Trang 16

4 Tạo menu và xử lý đầu vào từ người dùng (chương trình chọn hình vẽ) (Sử dụng thư viện graphics.h)

Chương trình này sẽ hiển thị một menu đơn giản cho phép người dùng chọn một trong ba hình dạng (hình tròn, hình vuông và hình tam giác) để

vẽ lên màn hình

Cách chương trình hoạt động:

Trang 17

Chương trình bắt đầu bằng việc khai báo các hàm `drawCircle()`,

`drawSquare()` và `drawTriangle()` để vẽ hình tròn, hình vuông và hình tam giác tương ứng

Trong hàm `main()`, chương trình khởi tạo đồ họa bằng cách gọi hàm `initgraph()`

Sau đó, chương trình hiển thị một menu và nhận đầu vào từ người dùng bằng cách sử dụng hàm `getch()`

Tùy thuộc vào lựa chọn của người dùng, chương trình sẽ gọi hàm tương ứng để vẽ hình dạng đã chọn

Sau khi vẽ xong, chương trình sẽ đợi người dùng nhấn phím để tiếp tục

Quá trình này lặp lại cho đến khi người dùng chọn thoát khỏi chương trình

Cuối cùng, chương trình đóng đồ họa bằng cách gọi hàm

`closegraph()`

5 Trò chơi (rắn săn mồi) (Sử dụng thư viện OpenGL)

Cách chương trình hoạt động:

Chương trình bắt đầu bằng việc khai báo các hàm đồ họa như point(), wall(), output() và drawstring() để vẽ các đối tượng trên màn hình

Hàm frontscreen() hiển thị màn hình bắt đầu của trò chơi, bao gồm thông tin về trò chơi và tác giả

Hàm startscreen() hiển thị menu chính của trò chơi, cho phép người chơi chọn chơi mới, đọc hướng dẫn hoặc thoát trò chơi Hàm instructions() hiển thị hướng dẫn cho người chơi, bao gồm cách điều khiển, ý nghĩa của các điểm màu và thời gian chơi Hàm winscreen() hiển thị màn hình chiến thắng khi người chơi đạt đến điểm đích

Hàm timeover() hiển thị màn hình khi thời gian chơi đã hết Hàm SpecialKey() xử lý sự kiện di chuyển của người chơi bằng cách sử dụng các phím mũi tên Chương trình kiểm tra xem nhân vật có thể di chuyển đến vị trí mới hay không bằng cách so sánh tọa độ mới với các bức tường trong mê cung

Hàm display() vẽ các đối tượng trên màn hình tùy thuộc vào trạng thái của trò chơi Nó gọi các hàm khác nhau để hiển thị màn hình bắt đầu, màn hình chính, hướng dẫn, màn hình chiến thắng hoặc màn hình hết giờ

Trang 18

Hàm keyboard() xử lý sự kiện nhấn phím từ bàn phím, cho phép người chơi chọn các tùy chọn trong menu hoặc khởi động lại trò chơi

Hàm idle() kiểm tra điều kiện chiến thắng và hết giờ trong khi trò chơi đang chạy

Hàm wall() vẽ các bức tường của mê cung bằng cách sử dụng các

đa giác

Hàm main() khởi tạo cửa sổ OpenGL, thiết lập các chế độ vẽ, gán các hàm xử lý sự kiện và bắt đầu vòng lặp chính của trò chơi Khi chạy chương trình, người chơi sẽ thấy màn hình bắt đầu và có thể chọn chơi mới, đọc hướng dẫn hoặc thoát trò chơi Sau khi chọn chơi mới, màn hình chính sẽ hiển thị với mê cung và điểm xuất phát (điểm xanh lá cây) Người chơi có thể sử dụng các phím mũi tên để di chuyển trong mê cung và cố gắng đạt đến điểm đích (điểm đỏ) trước khi hết thời gian Nếu người chơi đạt đến điểm đích trong thời gian quy định, màn hình chiến thắng sẽ hiển thị Nếu thời gian hết, màn hình hết giờ sẽ hiển thị Người chơi có thể chọn chơi lại hoặc thoát trò chơi từ các màn hình này

Ngày đăng: 11/06/2024, 17:41

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

TÀI LIỆU LIÊN QUAN

w