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

Đề Tài Nghiên Cứu Khoa Học Xây Dựng Hệ Thống Hỗ Trợ Vẽ Hình Học Đơn Giản.pdf

26 0 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

Tiêu đề Xây Dựng Hệ Thống Hỗ Trợ Vẽ Hình Học Đơn Giản
Tác giả Hà Minh Quân, Nguyễn Thi Như Kiều, Mai Văn Hậu
Người hướng dẫn Phạm Anh Phương, CBHD
Trường học Trường Đại Học Sư Phạm – Đại Học Đà Nẵng
Chuyên ngành Tin Học
Thể loại Nghiên cứu khoa học
Năm xuất bản 2023
Thành phố Đà Nẵng
Định dạng
Số trang 26
Dung lượng 1,04 MB

Nội dung

Lý do chọn đề tàiKhi học hình học, việc vẽ hình học là một cách để học sinh tạo ra một hình ảnh về các khái niệm hình học một cách trực quan.. Bằng cách vẽ các hình, học sinh có thểthấy

Trang 1

KHOA TIN HỌC

ĐỀ TÀINGHIÊN CỨU KHOA HỌC

XÂY DỰNG HỆ THỐNG HỖ TRỢVẼ HÌNH HỌC ĐƠN GIẢN

Nhóm sinh viên : Hà Minh Quân

Nguyễn Thi Như KiềuMai Văn Hậu

ĐÀ NẴNG, 02/2023

Trang 2

MỤC LỤC

1 Lý do chọn đề tài 1

2 Mục tiêu đề tài 1

3 Đối tượng và phạm vi nghiên cứu 2

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

6 Bố cục của bài báo cáo 2

CHƯƠNG 1: GIỚI THIỆU VỀ CHƯƠNG TRÌNH HỖ TRỢ VẼ HÌNH HỌCĐƠN GIẢN 3

CHƯƠNG 2: CÁC THUẬT TOÁN VẼ HÌNH 3

CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM 10

Chương trình vẽ hình học đơn giản 10

7 Kế hoạch dự kiến triển khai đề tài 22

Trang 3

1 Lý do chọn đề tài

Khi học hình học, việc vẽ hình học là một cách để học sinh tạo ra một hình ảnh về các khái niệm hình học một cách trực quan Bằng cách vẽ các hình, học sinh có thểthấy được mối quan hệ giữa các đối tượng hình học và các thuộc tính của chúng Chẳng hạn, khi vẽ một tam giác, học sinh sẽ thấy rằng tam giác có ba cạnh và ba góc, mỗi góc nằm trong khoảng từ 0 đến 180 độ và tổng của ba góc bằng 180 độ Việc hình dung và vẽ các hình này giúp học sinh hiểu sâu hơn về các khái niệm hình học và cách chúng tương tác với nhau

Ngoài ra, việc vẽ hình học cũng giúp học sinh phát triển kỹ năng tư duy hình học, tăng cường khả năng trực quan hóa vấn đề và giúp học sinh dễ dàng hình dung và giải quyết các bài toán hình học Bằng cách vẽ các hình và chú thích các thuộc tínhcủa chúng, học sinh có thể hiểu rõ hơn về cách giải quyết các bài toán hình học và trả lời các câu hỏi liên quan đến chúng

Cuối cùng, việc vẽ hình học cũng giúp giáo viên trình bày các khái niệm hình học một cách trực quan và sinh động hơn, giúp học sinh dễ dàng hình dung và nhớ lại các khái niệm đó Việc sử dụng hình ảnh và minh họa trong giảng dạy có thể giúp học sinh tăng cường khả năng ghi nhớ và hiểu sâu hơn về các khái niệm hình học.Để hỗ trợ việc học nói chung và học hình học nói riêng, chúng em đã xây dựng một chương trình hỗ trợ vẽ các đối tượng hình học đơn giản

2 Mục tiêu đề tài

 Vẽ được các hình học cơ bản. Sản phẩm có giao diễn cơ bản, dễ hiểu Demo sản phẩm

Trang 4

3 Đối tượng và phạm vi nghiên cứu3.1 Đối tượng nghiên cứu

Pass

3.2 Phạm vi nghiên cứu

Tìm hiểu và vận dụng các thuật toán cơ bản để vẽ đường thẳng, hình tròn,hình vuông, hình chữ nhật và cài đặt chương trình Demo, cho phép liệt kêcác cấu hình của từng thuật toán vừa nêu trên

4 Phương pháp nghiên cứu

 Tổng hợp, phân tích các phần mềm tương tự trước đây và từ đó rút ra, tìm racác vấn đề cần giải quyết và đúc kết phương án giải quyết vấn đề

 Tham khảo các văn bản, tài liệu liên quan đến vấn đề nhằm tìm kiếm các phương pháp cải tiến và xây dựng thuật toán vẽ hình dựa vào đó. Thực nghiệm với các hình học cơ bản để chứng minh tính khả thi của thuật

toán

5 Kết quả dự kiến5.1 Lý thuyết

 Hoàn thành tìm hiểu lý thuyết xây dựng các thuật toán vẽ hình. Áp dụng thuật toán và vẽ hình với con trỏ chuột |vào các bài toán liệt kê

các đối tượng với điều kiện cho trước

5.2 Thực tiễn

 Trình bày rõ ràng, cụ thể từng bước thực hiện để đi đến kết quả. Xây dựng được chương trình để áp dụng cho nhiều trường hợp của nhiều

bài toán

6 Bố cục của bài báo cáo

Bài báo cáo được chia thành 3 mục chính:

Trang 5

- Chương 1: Giới thiệu về chương trình.- Chương 2: Các thuật toán vẽ hình.- Chương 3: Kết quả thực nghiệm.

CHƯƠNG 1: GIỚI THIỆU VỀ CHƯƠNG TRÌNH HỖ TRỢ VẼ HÌNH HỌC ĐƠN GIẢN

Chương trình hỗ trợ vẽ hình học cơ bản là chương trình giúp mọi người có thể vẽ các hình học một cách đơn giản và chính xác, sử dụng thư viện Pygame viết trên ngôn ngữ Python

Dựa vào các tiện ích đã có như GeoGebra, Paint, Geometer’s Sketchpad, chương trình đã phát triển được một số công cụ cơ bản

Các chức năng cơ bản chương trình hỗ trợ: Vẽ điểm

 Vẽ đường thẳng Vẽ đường tròn Vẽ hình chữ nhật Vẽ hình vuông

CHƯƠNG 2: CÁC THUẬT TOÁN VẼ HÌNH2.1 Chức năng vẽ điểm

Sử dụng mảng để lưu những vị trí của con trỏ khi nhấp chuột, sau đó vẽ lại với hàm pygame.draw.circle()

def Point(): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit()

if event.type == pygame.MOUSEBUTTONDOWN : pos = pygame.mouse.get_pos()

list_pos_point.append(pos)

Trang 6

if event.type == pygame.KEYDOWN: key_word = pygame.key.get_pressed() if key_word[pygame.K_ESCAPE]: list_pos_point.pop()

mouse = pygame.mouse.get_pos() if mouse[0] <= 150:

mouse = (155, mouse[1]) pygame.draw.circle(screen, BLUE, mouse, 5)def DrawPoint():

for i in list_pos_point: if i[0] <= 150: list_pos_point.pop() pygame.draw.circle(screen, BLUE, i, 5)

2.2 Chức năng vẽ đường thẳng

Sử dụng mảng để lưu vị trí của con trỏ khi nhấp chuột, sau đó sử dụng hàm pyame.draw.line() để vẽ đường thẳng với mỗi cặp vị trí được lưu

def Line(): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit()

if event.type == pygame.MOUSEBUTTONDOWN : pos = pygame.mouse.get_pos()

list_pos_line.append(pos) if event.type == pygame.KEYDOWN: key_word = pygame.key.get_pressed() if key_word[pygame.K_ESCAPE]: list_pos_line.pop()

Trang 7

if len(list_pos_line)%2 == 1 : point = list_pos_line[-1] mouse = pygame.mouse.get_pos() if mouse[0] <= 150:

mouse = (155, mouse[1]) pygame.draw.line(screen, BLACK, point, mouse, 2) pygame.draw.circle(screen, BLUE, point, 5)

def DrawLine(): if len(list_pos_line) >= 1: if list_pos_line[-1][0] <= 150: list_pos_line.pop() if len(list_pos_line) %2 == 1: list_pos_line.pop() number_of_lines = int (len(list_pos_line)/2) for i in range(number_of_lines): a = list_pos_line[2*i]

b = list_pos_line[2*i+1] pygame.draw.line(screen, BLACK, a, b, 2) pygame.draw.circle(screen, BLUE, a, 5) pygame.draw.circle(screen, BLUE, b, 5)

2.3 Chức năng vẽ đường tròn

Sử dụng mảng để lưu vị trí con trỏ khi nhấp chuột lần đầu tiên, sau đó dựa vào vịtrí của con trỏ trong lần nhấp chuột tiếp theo để tính toán bán kính và dựa vào hàmpygame.draw.circle() để vẽ hình tròn

def Circle(): for event in pygame.event.get():

Trang 8

if event.type == pygame.QUIT: pygame.quit()

if event.type == pygame.MOUSEBUTTONDOWN : pos = pygame.mouse.get_pos()

list_pos_circle.append(pos) if event.type == pygame.KEYDOWN: key_word = pygame.key.get_pressed() if key_word[pygame.K_ESCAPE]: list_pos_circle.pop()

if len(list_pos_circle)%2 == 1 : point = list_pos_circle[-1] mouse = pygame.mouse.get_pos() R = math.sqrt(pow(mouse[0] - point[0], 2)+ pow(mouse[1] - point[1], 2)) if R >= point[0] - 150:

R = point[0] - 150 pygame.draw.circle(screen, BLUE, point, 5) pygame.draw.circle(screen, BLACK, point, R ,2)def DrawCircle():

if len(list_pos_circle) >= 1: if list_pos_circle[-1][0] <= 150: list_pos_circle.pop() if len(list_pos_circle) %2 == 1: list_pos_circle.pop() number_of_circle = int (len(list_pos_circle)/2) for i in range(number_of_circle): a = list_pos_circle[2*i]

b = list_pos_circle[2*i+1] pygame.draw.circle(screen, BLUE, a, 5)

Trang 9

R = math.sqrt(pow(a[0] - b[0], 2)+ pow(a[1] - b[1], 2)) if R >= a[0] - 150:

R = a[0] - 150 pygame.draw.circle(screen, BLACK, a, R ,2)

2.4 Chức năng vẽ hình chữ nhật

Thư viện Pygame sử dụng điểm đầu tiên, chiều rộng và chiều dài để vẽ hình chữnhật Vì vậy để vẽ hình nhật, phải sử dụng mảng để lưu vị trí con trỏ khi nhấpchuột lần đầu tiên, sau đó tính toán chiều rộng và chiều dài của hình chữ nhật dựavào vị trí con trỏ trong lần nhấp tiếp theo, cuối cùng sử dụng hàmpygame.draw.rect() để vẽ hình chữ nhật

def Rectangle(): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit()

if event.type == pygame.MOUSEBUTTONDOWN : pos = pygame.mouse.get_pos()

list_pos_rectangle.append(pos) if event.type == pygame.KEYDOWN: key_word = pygame.key.get_pressed() if key_word[pygame.K_ESCAPE]: list_pos_rectangle.pop()

if len(list_pos_rectangle)%2 == 1 : point = list_pos_rectangle[-1] mouse = pygame.mouse.get_pos() if mouse[0] <= 150:

mouse = (155, mouse[1]) pygame.draw.circle(screen, BLUE, point, 5) length = abs(point[0]-mouse[0])

width = abs(point[1]-mouse[1])

Trang 10

point_x = min(point[0],mouse[0]) point_y = min(point[1],mouse[1]) pygame.draw.rect(screen, BLACK, (point_x, point_y, length, width), 2)def DrawRectangle():

if len(list_pos_rectangle) >= 1: if list_pos_rectangle[-1][0] <= 150: list_pos_rectangle.pop() if len(list_pos_rectangle) %2 == 1: list_pos_rectangle.pop()

number_of_rectangle = int (len(list_pos_rectangle)/2) for i in range(number_of_rectangle):

a = list_pos_rectangle[2*i] b = list_pos_rectangle[2*i+1] length = abs(a[0]-b[0]) width = abs(a[1]-b[1]) point_x = min(a[0],b[0]) point_y = min(a[1],b[1]) pygame.draw.rect(screen, BLACK, (point_x, point_y, length, width), 2)

2.5 Chức năng vẽ hình vuông

Tương tự với cách vẽ hình vuông, nhưng sẽ sử dụng tọa độ x/y ngắn nhất để thay vào chiều rộng và chiều cao trong hàm vẽ

def Square(): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit()

if event.type == pygame.MOUSEBUTTONDOWN : pos = pygame.mouse.get_pos()

Trang 11

list_pos_square.append(pos) if event.type == pygame.KEYDOWN: key_word = pygame.key.get_pressed() if key_word[pygame.K_ESCAPE]: list_pos_square.pop()

if len(list_pos_square)%2 == 1 : point = list_pos_square[len(list_pos_square)-1] mouse = pygame.mouse.get_pos()

if mouse[0] <= 150: mouse = (155, mouse[1]) length = min (abs(point[0]-mouse[0]), abs(point[1]-mouse[1])) if point[0] > mouse[0]:

point_x = point[0] - length else: point_x = point[0] if point[1] > mouse[1]: point_y = point[1] - length else: point_y = point[1] pygame.draw.circle(screen, BLUE, point, 5) pygame.draw.rect(screen, BLACK, (point_x, point_y, length, length), 2) def DrawSquare():

if len(list_pos_square) >= 1: if list_pos_square[-1][0] <= 150: list_pos_square.pop() if len(list_pos_square) %2 == 1: list_pos_square.pop()

number_of_square = int (len(list_pos_square)/2) for i in range(number_of_square):

a = list_pos_square[2*i]

Trang 12

b = list_pos_square[2*i+1] length = min (abs(a[0]-b[0]), abs(a[1]-b[1])) if a[0] > b[0]:

point_x = a[0] - length else:

point_x = a[0] if a[1] > b[1]: point_y = a[1] - length else:

point_y = a[1] pygame.draw.rect(screen, BLACK, (point_x, point_y, length, length), 2)

CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆMChương trình vẽ hình học đơn giản

Chương trình có mẫu code hoàn chỉnh như sau:

import pygameimport math

WHITE = (255, 255, 255)RED = (255, 0, 0)BLACK = ( 0, 0, 0)GREY = (220, 220, 220)BLUE = ( 0, 0, 255)

class Button: def init (self, x, y, width, height, count, image=None , font_size=32):

Trang 13

self.rect = pygame.Rect(x, y, width, height) self.image = None

if image: self.image = pygame.image.load("circle.svg") self.image = pygame.transform.scale(self.image, (width, height)) self.count = count

self.font = pygame.font.Font(None, font_size) self.color = (255, 255, 255)

def draw(self, surface): if self.image: surface.blit(self.image, self.rect)

def is_clicked(self, pos): return self.rect.collidepoint(pos)

def checkForInput(self, pos): if pos[0] in range(self.rect.left, self.rect.right) and pos[1] in range(self.rect.top, self.rect.bottom):

return True return False

pygame.init()screen = pygame.display.set_mode((800, 600))# screen1 = pygame.display.set_mode((150, 600))

Trang 14

list_pos_point = []list_pos_line = []list_pos_circle = []list_pos_rectangle = []list_pos_square = []

def Point(): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit()

if event.type == pygame.MOUSEBUTTONDOWN : pos = pygame.mouse.get_pos()

list_pos_point.append(pos) if event.type == pygame.KEYDOWN: key_word = pygame.key.get_pressed() if key_word[pygame.K_ESCAPE]: list_pos_point.pop()

mouse = pygame.mouse.get_pos() if mouse[0] <= 150:

mouse = (155, mouse[1]) pygame.draw.circle(screen, BLUE, mouse, 5)

def DrawPoint():

for i in list_pos_point:

Trang 15

if i[0] <= 150: list_pos_point.pop() pygame.draw.circle(screen, BLUE, i, 5)

def Line(): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit()

if event.type == pygame.MOUSEBUTTONDOWN : pos = pygame.mouse.get_pos()

list_pos_line.append(pos) if event.type == pygame.KEYDOWN: key_word = pygame.key.get_pressed() if key_word[pygame.K_ESCAPE]: list_pos_line.pop()

if len(list_pos_line)%2 == 1 : point = list_pos_line[-1] mouse = pygame.mouse.get_pos() if mouse[0] <= 150:

mouse = (155, mouse[1]) pygame.draw.line(screen, BLACK, point, mouse, 2) pygame.draw.circle(screen, BLUE, point, 5)

def DrawLine():

Trang 16

if len(list_pos_line) >= 1: if list_pos_line[-1][0] <= 150: list_pos_line.pop() if len(list_pos_line) %2 == 1: list_pos_line.pop() number_of_lines = int (len(list_pos_line)/2) for i in range(number_of_lines): a = list_pos_line[2*i]

b = list_pos_line[2*i+1] pygame.draw.line(screen, BLACK, a, b, 2) pygame.draw.circle(screen, BLUE, a, 5) pygame.draw.circle(screen, BLUE, b, 5)

def Circle(): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit()

if event.type == pygame.MOUSEBUTTONDOWN : pos = pygame.mouse.get_pos()

list_pos_circle.append(pos) if event.type == pygame.KEYDOWN: key_word = pygame.key.get_pressed() if key_word[pygame.K_ESCAPE]: list_pos_circle.pop()

if len(list_pos_circle)%2 == 1 :

Trang 17

point = list_pos_circle[-1] mouse = pygame.mouse.get_pos() R = math.sqrt(pow(mouse[0] - point[0], 2)+ pow(mouse[1] - point[1], 2)) if R >= point[0] - 150:

R = point[0] - 150 pygame.draw.circle(screen, BLUE, point, 5) pygame.draw.circle(screen, BLACK, point, R ,2)

def DrawCircle(): if len(list_pos_circle) >= 1: if list_pos_circle[-1][0] <= 150: list_pos_circle.pop() if len(list_pos_circle) %2 == 1: list_pos_circle.pop()

number_of_circle = int (len(list_pos_circle)/2) for i in range(number_of_circle): a = list_pos_circle[2*i]

b = list_pos_circle[2*i+1] pygame.draw.circle(screen, BLUE, a, 5) R = math.sqrt(pow(a[0] - b[0], 2)+ pow(a[1] - b[1], 2)) if R >= a[0] - 150:

R = a[0] - 150 pygame.draw.circle(screen, BLACK, a, R ,2)

def Rectangle(): for event in pygame.event.get():

Ngày đăng: 23/09/2024, 15:01

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

TÀI LIỆU LIÊN QUAN