1. Trang chủ
  2. » Tất cả

Luận văn tốt nghiệp tìm phần đoạn thẳng nằm trong hình tròn

28 0 0

Đ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 đề Tìm phần đoạn thẳng nằm trong hình tròn
Người hướng dẫn Hà Nghị Hùng
Trường học Học viện Ngân hàng
Chuyên ngành Công nghệ thông tin
Thể loại Đề tài tốt nghiệp
Năm xuất bản 2011
Thành phố Hà Nội
Định dạng
Số trang 28
Dung lượng 455,5 KB

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

Nội dung

VIỆN ĐẠI HỌC MỞ HÀ NỘI HỌC VIỆN NGÂN HÀNG KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ ((( TÌM PHẦN ĐOẠN THẲNG NẰM TRONG HÌNH TRÒN Sinh viên Giáo viên hướng dẫn HÀ NỘI 2011 MỤC LỤC 1MỤC LỤC 2MỞ ĐẦU 3Chương 1 CƠ SỞ[.]

Trang 1

HÀ NỘI - 2011

Trang 2

MỤC LỤC

MỤC LỤC 1

MỞ ĐẦU 2

Chương 1 CƠ SỞ TOÁN HỌC CỦA PHƯƠNG PHÁP TÌM PHẦN ĐOẠN THẲNG NẰM TRONG HÌNH TRÒN 3

1.1 Tổng quan 3

1.2 Phương pháp tìm phần đoạn thẳng nằm trong hình tròn 3

Chương 2 BIỂU DIỄN HỆ TRỤC TỌA ĐỘ TRONG MÁY TÍNH 7

2.1 Hệ toạ độ thế giới thực và hệ toạ độ màn hình 7

2.1.1 Hệ tọa độ thế giới thực 7

2.1.2 Hệ toạ độ hiển thị trên màn hình 7

2.2 Các phép biến đổi trong không gian 2 chiều 8

2.2.1 Phép tịnh tiến 8

2.2.2 Phép co giãn hệ toạ độ 9

2.3 Biến đổi từ hệ toạ độ thực sang toạ độ màn hình 9

2.3.1 Chuyển từ toạ độ thực sang cửa sổ nhìn : 9

2.3.2 Chuyển từ cửa sổ nhìn sang màn hình 10

Chương 3 CHƯƠNG TRÌNH TÌM PHẦN ĐOẠN THẲNG NẰM TRONG HÌNH TRÒN 12

3.1 Yêu cầu chương trình 12

3.2 Xây dựng chương trình 12

3.2.1 Chương trình con nhập dữ liệu từ bàn phím 13

3.2.2 Chương trình con lấy dữ liệu từ file đưa ra mảng 14

3.2.3 Chương trình con sinh ngẫu nhiên 14

3.2.4 Chương trình con tìm phần giao của đoạn thẳng và hình tròn 15

3.2.5 Chương trình con vẽ hình tròn và đoạn thẳng 17

3.3 Mã nguồn chương trình 19

KẾT LUẬN 26

TÀI LIỆU THAM KHẢO 27

Trang 3

MỞ ĐẦU

Trong thời đại của công nghệ thông tin hiện nay thì lĩnh vực đồ họa máytính - một trong những lĩnh vực lý thú của tin học - cũng ngày một phát triểnkhông ngừng Đồ họa máy tính - một ngành khoa học tin học chuyên nghiên cứu

về các phương pháp và các kỹ thuật nhằm mô tả dữ liệu thông qua các hình ảnh.Đồng hành với sự phát triển của lĩnh vực đồ hoạ máy tính thì cơ sở toán họccủa nó cũng ngày được củng cố với nhiều thuật toán mới, hiệu quả, phục vụ đắclực cho các nhà đồ hoạ máy tính có thể phát triển các ứng dụng đồ hoạ ngày càngđẹp mắt và phục vụ tốt cho cuộc sống trong rất nhiều lĩnh vực

Hình học là một trong những nhân tố cơ sở cho đồ hoạ máy tính, cùng với

sự phát triển của các thuật toán về hình học là sự phát triển vượt bậc của đồ hoạ.Trong hình học thì bài toán tìm phần giao giữa các đối tượng là bài toán rất thú

vị và đã có nhiều thuật toán hay được đưa ra

Chính vì thế em đã chọn đề tài “Tìm phần đoạn thẳng nằm trong hình

tròn” để nghiên cứu tốt hơn về phương pháp tìm phần giao giữa các đối tượng.

Vì thời gian nghiên cứu ngắn và trình có hạn đề tài chắc chắn không thể tránhđược những thiếu sót

Cuối cùng, em xin chân thành cám ơn thầy giáo …, các thầy cô giáo thuộckhoa … và các bạn sinh viên đồng nghiệp đã giúp đỡ, đóng góp ý kiến để đề tàitốt nghiệp này được hoàn thành

Xin chân thành cảm ơn!

Trang 4

Chương 1 CƠ SỞ TOÁN HỌC CỦA PHƯƠNG PHÁP TÌM

PHẦN ĐOẠN THẲNG NẰM TRONG HÌNH TRÒN

1.1 Tổng quan

Các bài toán liên quan đến việc tìm phần giao và hợp của các đối tượnghình học phẳng như đa giác, đường tròn thường là các bài toán khá hay và đểtìm ra lời giải tối ưu thì đòi hỏi người lập trình phải có tư duy tốt về toán học.Đặc biệt, tìm giao hai đa giác là một trong những bài toán cơ sở của hình họctính toán và có nhiều ứng dụng trong các lĩnh vực khác nhau của đồ hoạ máytính, CAD, GIS,

Ý tưởng chính của phương pháp tìm phần giao giữa các đối tượng hình họcnày là ta chia mặt phẳng toạ độ ra làm nhiều ô nhỏ (phương pháp chia lưới) bằngcác đường thẳng song song với trục toạ độ Kiểm tra từng ô vuông, nếu thuộc cả

2 hình thì ta tiến hành cộng dồn lại Cuối cùng ta sẽ có được vùng giao giữa haiđối tượng hình học

Phương pháp này chỉ cho kết quả gần đúng Kích thước các ô vuông củalưới càng nhỏ thì độ chính xác càng cao nhưng tốc độ thực hiện lại chậm đi Vìvậy, cần có kỹ thuật duyệt để hạn chế số lượng hay khoanh vùng các ô vuôngnhỏ cần kiểm tra

1.2 Phương pháp tìm phần đoạn thẳng nằm trong hình tròn

Về cơ bản, bài toán tìm phần đoạn thẳng nằm trong hình tròn cũng chính làbài toán tìm giao giữa hai đối tượng hình học là đoạn thẳng và hình tròn (hìnhtròn bao gồm cả đường tròn và miền bên trong đường tròn) Do đó, ý tưởng củabài toán này cũng tương tự như bài toán chung đã nêu trên, đó là ta sẽ chia nhỏmặt phẳng thành các điểm nhỏ và kiểm tra các điểm đó xem có thuộc đoạn thẳng

và đường tròn hay không Cuối cùng chỉ cần nối các điểm đó lại với nhau là tađược phần đoạn thẳng nằm trong hình tròn

Tuy nhiên, phương pháp này khó thực hiện được bởi số điểm phải kiểm tra

Trang 5

Ta nhận thấy, với một đoạn thẳng AB bất kì và một đường tròn tâm O bánkính R thì có thể xảy ra các trường hợp như sau:

Trường hợp 1: Đoạn thẳng không cắt hình tròn Khi đó giao của AB và

Trang 6

Trường hợp 4: Đoạn thẳng cắt đường tròn tại một điểm (nhưng không phải

tiếp xúc) Phần chung của đoạn thẳng với hình tròn là đoạn thẳng từ đầu mútnằm trong hình tròn đến giao điểm giữa đoạn thẳng đến đường tròn

Khi đó, có hai trường hợp xảy ra:

- Thứ nhất: dR;OAR;OBR tức là điểm A nằm trong hình tròn còn điểm

B nằm ngoài hình tròn Đoạn AM chính là phần đoạn thẳng giao với hình tròn

- Thứ hai: dR;OAR;OBR tức là điểm B nằm trong hình tròn còn điểm

A nằm ngoài hình tròn Đoạn BM chính là phần đoạn thẳng giao với hình tròn

Trường hợp 5: Đoạn thẳng cắt đường tròn tại hai điểm.

Đoạn thẳng AB cắt đường tròn tại hai điểm M1 và M2, đoạn M1M2 chính làphần đoạn thẳng nằm phía trong hình tròn

Như vậy, ta có thuật toán để tìm phần đoạn thẳng nằm phía trong hình trònnhư sau:

Bước 0: Viết phương trình đường thẳng đi qua A, B và phương trình đường

tròn tâm O bán kính R

Bước 1: Tìm giao điểm (nếu có) của đoạn thẳng với đường tròn (dùng

phương pháp chia nhỏ đoạn AB thành các điểm và kiểm tra các điểm thoả mãnphương trình đường tròn) Giả sử là M1 và M2

Bước 2: Nếu không có giao điểm: Giao là rỗng  Kết thúc.

A

B

O M

Trang 8

Chương 2 BIỂU DIỄN HỆ TRỤC TỌA ĐỘ TRONG MÁY TÍNH

2.1 Hệ toạ độ thế giới thực và hệ toạ độ màn hình

2.1.1 Hệ tọa độ thế giới thực

Hệ tọa độ thế giới thực (hay hệ tọa độ thực) là hệ tọa độ được dùng mô tảcác đối tượng của thế giới thực Một trong các hệ tọa độ thực thường được dùngnhất đó là hệ tọa độ Descartes Với hệ tọa độ này, bất kỳ một điểm nào trong mặtphẳng cũng được mô tả bằng một cặp tọa độ (x,y) trong đó x, y thuộc R, Gốc tọa

độ là điểm O có tọa độ (0, 0) Các trục tọa độ có chiều dương được quy định nhưhình vẽ; Ox, Oy lần lượt được gọi là trục hoành và trục tung; x được gọi là hoành

độ và y được gọi là tung độ Các tọa độ thế giới thực cho phép người dùng sửdụng bất kỳ một thứ nguyên (dimension) quy ước (foot, cm, mm, km, inch, …)nào và có thể lớn nhỏ tùy ý

2.1.2 Hệ toạ độ hiển thị trên màn hình

Khi thực hiện các chế độ đồ hoạ người ta quy ước gắn trên màn hình hệ toạ

độ Descartes theo quy ước sau:

Trục X gọi là tọa độ cột, Y gọi là toạ độ hàng Ô có toạ độ X,Y là đơn vị đồhoạ nhỏ nhất gọi là pixel - một pixel trên màn hình là hình ảnh của một điểmtrong hệ toạ độ thực Khó khăn cơ bản trong kỹ thuật đồ hoạ vi tính là người taphải sử dụng các pixel có toạ độ nguyên để biểu diễn tất cả các điểm trong hệ toạ

độ thực

P(x,y) y

x O

Trang 9

Số pixel có được trên màn hình phụ thuộc vào độ phân giải của màn hình

Ví dụ:

CGA: 320x200

EGA: 640x350

VGA: 640x480

2.2 Các phép biến đổi trong không gian 2 chiều

Chúng ta biết rằng trong không gian hai chiều để biểu diễn các hình người

ta thường chọn hệ toạ độ Descartes hoặc hệ toạ độ cực Để tiện cho việc khảo sátcác hình người ta cần phải thực hiện một số phép biến đổi, dưới đây ta xem xétmột số phép biến đổi cơ bản: tịnh tiến, quay, co giãn trong không gian hai chiều

2.2.1 Phép tịnh tiến

Giả sử trong hệ toạ độ Descartes XOY cho điểm P(x,y) để dịch chuyểnđiểm P(x,y) đến điểm P'(x',y') theo vectơ T=[Tx,Ty] khi đó x',y' được xác địnhnhư sau:

Trang 10

2.2.2 Phép co giãn hệ toạ độ

Giả sử có hệ toạ độ OXY ta cần phải giãn trục OX với hệ số Lx, trục OYvới hệ số Ly khi đó điểm P(x,y) sẽ trở thành điểm P'(x',y') biểu diễn trong hệXOY có dạng:

2.3 Biến đổi từ hệ toạ độ thực sang toạ độ màn hình

Trước tiên ta khai báo kiểu cấu trúc của điểm trong không gian 2 chiều nhưsau :

struct diem{

float x,y;

};

(Tuy rằmg toạ độ trên màn hình là kiểu số nguyên nhưng ta khai báo là kiểu

số thực, vì nếu khai báo là kiểu số nguyên các phép tính giữa số thực và sốnguyên hay bị tràn số)

2.3.1 Chuyển từ toạ độ thực sang cửa sổ nhìn :

Giả sử hình vẽ của chúng ta ở hệ toạ độ thực là nằm trong hình chữ nhật cóđỉnh trên bên trái là (Xmin,Ymin) và đỉnh dưới bên phải là (Xmax, Ymax) nhưvậy kích thước của hình vẽ là (Xmax-Xmin) x (Ymax-Ymin), nhưng ta lại muốnnhìn hình vẽ trong một cửa sổ có kích thước là MaxX x MaxY nên nếu hình vẽnhỏ hơn của sổ nhìn thì ta phải phóng to lên, còn ngược lại nếu lớn hơn thì taphải thu nhỏ lại, như vậy ta sẽ thực hiện một phép co dãn theo hệ số co dãn là : CGx:=MaxX/(Xmax-Xmin);

CGy:=MaxY/(Ymax-Ymin);

Trang 11

Lúc này các toạ độ của các điểm sẽ được nhân với CGx và CGy :

2.3.2 Chuyển từ cửa sổ nhìn sang màn hình

Như ta đã biết toạ độ của màn hình có gốc là đỉnh trên bên trái và theo chiềudương như trên hình vẽ, mà ta lại phải mô tả hình vẽ như là ở thế giới thực, do

đó ta phải biến đổi hình vẽ từ cửa sổ nhìn sang màn hình

Trang 12

Như ở hình trên gốc toạ độ O của hình vẽ thực sẽ có toạ độ ở trên màn hình

Trang 13

Chương 3 CHƯƠNG TRÌNH TÌM PHẦN ĐOẠN THẲNG

NẰM TRONG HÌNH TRÒN

3.1 Yêu cầu chương trình

Trong mặt phẳng toạ độ Descartes, cho đoạn thẳng AB và một hình tròntâm O bán kính R Hãy tìm thuật toán tìm phần chung của đoạn AB và hình tròn(tức là tìm phần đoạn thẳng nằm phía trong hình tròn) Xét các trường hợp có thểxảy ra, vẽ hình minh hoạ Cụ thể:

i) Viết chương trình con nhập dữ liệu từ bàn phím

ii) Viết chương trình con ghi dữ liệu vào file

iii) Viết chương trình con lấy dữ liệu từ file đưa vào các biến để xử lý

iv) Viết chương trình tìm phần chung của đoạn thẳng với hình tròn

v) Viết chương trình con vẽ đoạn thẳng với hình tròn

vi) Viết chương trình con vẽ đoạn thẳng và hình tròn và phần chung củachúng (nếu có) trong hệ tọa độ Descartes lên một cửa sổ lên màn hình Cần phải

co dãn hình cho vừa cửa sổ và phải đổi từ toạ độ Decartes về toạ độ màn hìnhmới vẽ được

vi) Dùng các chương trình con trên viết chương trình giao diện gồm:

- Nhập dữ liệu

- Tìm phần chung của đoạn thẳng với hình tròn, vẽ hình minh hoạ

- Thoát khỏi chương trình

Khi nhập dữ liệu có thể nhập từ bàn phím, nhập ngẫu nhiên hoặc từ file.Nếu khi nhập từ bàn phím thì sau khi nhập xong, hỏi xem nếu cần ghi vào file thìghi Nếu nhập ngẫu nhiên thì dùng hàm random phát số ngẫu nhiên, xong hỏixem cần ghi lại vào file thì ghi Nếu nhập từ file thì hỏi tên file, sau đó lấy dữliệu từ file đưa ra mảng và xử lý tiếp

Trang 14

3.2 Xây dựng chương trình

Chương trình được viết bằng ngôn ngữ lập trình C với môi trường biên dịchTurbo C++ 3.0 của Borland International Chương trình được phân tách thànhcác modul riêng (như phần thiết kế giao diện, tính toán), việc khởi chạy chươngtrình thông qua tập tin thực thi main.exe đã được biên dịch Người dùng có thểdùng bàn phím để thao tác với chương trình

3.2.1 Chương trình con nhập dữ liệu từ bàn phím

Đoạn chương trình sau đây giúp người dùng nhập dữ liệu bằng bàn phím.Người dùng sẽ lần lượt nhập toạ độ cho các điểm A, B, tâm O và bán kính R.Khi đã nhập xong, chương trình sẽ hỏi có ghi vào file hay không, nếu ngườidùng đồng ý ghi file (nhấn phím ‘c’ hoặc ‘C’) thì sẽ được yêu cầu nhập vào tênfile, tiếp đó chương trình sẽ tiến hành ghi các thông số vừa nhập vào file Hàmnhập dữ liệu từ bàn phím được cài đặt như sau:

Trang 15

fclose(f);

}

}

3.2.2 Chương trình con lấy dữ liệu từ file đưa ra mảng

Hàm này giúp đọc một file văn bản đã lưu trước đó (file này có thể được tạo

ra bằng một trình soạn thảo văn bản bất kì hoặc bằng chính chương trình này).Lưu ý, nếu file không có thì chương trình sẽ báo lỗi và yêu cầu nhập lại Hàm sẽlần lượt đọc các giá trị và lưu vào các biến A, B, O, r để xử lý tiếp

Mã nguồn cụ thể như sau:

3.2.3 Chương trình con sinh ngẫu nhiên

Ngoài nhập trực tiếp từ bàn phím, chương trình còn được thiết kế để máytính sinh ngẫu nhiên các toạ độ các điểm Việc phát sinh ngẫu nhiên được thôngqua hàm rand() của C Sau khi sinh xong, máy sẽ hỏi người dùng có lưu vào tệphay không, nếu người dùng đồng ý (nhấn phím ‘c’ hoặc ‘C’) thì chương trình sẽyêu cầu gõ tên tệp và máy tính sẽ tiến hành lưu các thông số vào tệp tin

Trang 16

3.2.4 Chương trình con tìm phần giao của đoạn thẳng và hình tròn

Hàm này sẽ có nhiệm vụ tìm ra phần giao của đoạn thẳng và hình tròn theothuật toán đã nêu ở mục 1.2 Kết quả thực hiện của hàm này sẽ cho ta biết vị trí

Trang 17

điểm với đường tròn, chương trình sẽ đưa ra toạ độ của hai điểm M1, M2 là haigiao điểm (nếu có) (nếu đoạn thẳng cắt đường tròn tại một điểm thì M1≡ M2).Chi tiết hàm tìm phần giao này như sau:

//Tim phan giao

if (A.x<B.x) {min=A.x; N1=A; max=B.x;N2=B;}

else {min=B.x; N1=B; max=A.x;N2=A;}

if (A.y<B.y) {min=A.y; N1=A; max=B.y;N2=B;}

else {min=B.y; N1=B; max=A.y;N2=A;}

Trang 18

if(OA<r) M2=A; else if (OB<r) M2=B;

outtextxy(10,10,"Doan thang cat duong tron tai mot diem."); sta=3;

}

if ((d2==1)&&(d1!=1))

{

if(OA<r) M1=A; else if (OB<r) M1=B;

outtextxy(10,10,"Doan thang cat duong tron tai mot diem."); sta=3;

3.2.5 Chương trình con vẽ hình tròn và đoạn thẳng.

Sau khi đã tìm được phần giao (nếu có) của đoạn thẳng và hình tròn thì

Trang 19

hình đồ hoạ Các điểm sẽ được đánh dấu để dễ nhận biết, để tiện theo dõi, phầnchung của đoạn thẳng với hình tròn sẽ được vẽ bằng một đường với màu khác.Quá trình vẽ các điểm này như sau:

Trước hết cần co giãn lại toạ độ của các điểm trong hệ toạ độ Decartesthông thường, sau đó phải chuyển vào toạ độ màn hình để có thể vẽ được trênmàn hình đồ hoạ

Toạ độ của một điểm M(x,y) sẽ được vẽ trên màn hình đồ hoạ bằng mộtđiểm có toạ độ (c,h) trên màn hình đồ hoạ theo công thức chuyển đổi:

c=int((M.x-xmin)*(col)/(xmax-xmin));

h=int((M.y-ymax)*(row-20.0)/(ymin-ymax))+20;

Trong đó, row và col và toạ độ lớn nhất của khung cửa sổ vẽ, xmax, ymin,xmin, ymax lần lượt là toạ của hai điểm góc trái bên trên và góc phải bên dướicủa khung hình chữ nhật bao đoạn thẳng và hình tròn

Dưới đây là đoạn chương trình dùng vẽ hình theo yêu cầu:

Trang 20

h1=int((B.y-ymax)*(row-20.0)/(ymin-ymax))+20; outtextxy(c-10,h+8,"A");

Trang 22

//Tinh khoang cach giua 2 diem

double kc(diem a, diem b)

{

return sqrtl((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y)); }

//Tim cac diem min, max

Trang 23

if (A.x<B.x) {min=A.x; N1=A; max=B.x;N2=B;}

else {min=B.x; N1=B; max=A.x;N2=A;}

if (A.y<B.y) {min=A.y; N1=A; max=B.y;N2=B;}

else {min=B.y; N1=B; max=A.y;N2=A;}

while (N1.y<=max)

Trang 24

if(OA<r) M2=A; else if (OB<r) M2=B;

outtextxy(10,10,"Doan thang cat duong tron tai mot diem."); sta=3;

}

if ((d2==1)&&(d1!=1))

{

if(OA<r) M1=A; else if (OB<r) M1=B;

outtextxy(10,10,"Doan thang cat duong tron tai mot diem."); sta=3;

Trang 25

printf("\nHay lua chon cong viec bang cach nhan phim so tuong ung\n");

printf("\n 1 Nhap du lieu tu ban phim\n");

Trang 26

printf("Chuc nang lua chon: ");

scanf("%d",&cv);

fflush(stdin);

switch (cv)

{

case 1: nhap_kb(); break;

case 2: nhap_ngau_nhien(); break;

case 3: nhap_tep(); break;

case 4: if (in!=1)

{ printf("Ban chua nhap du lieu !!!"); getch();

break;

} else {

}

}

}

Trang 27

KẾT LUẬN

Đồ họa máy tính - một trong những ngành nghiên cứu của khoa học máytính - ngày nay đã là một trong những lãnh vực phát triển nhanh nhất và lý thúnhất Cơ sở toán học của đồ hoạ máy tính cũng ngày càng được củng cố mở rộngcho phù hợp với sự phát triển của lĩnh vực hấp dẫn này

Nghiên cứu về đồ hoạ máy tính nói chung và đề tài “Tìm phần đoạn thẳngnằm trong hình tròn” nói riêng đã giúp tác giả hiểu rõ hơn về khả năng đồ hoạcủa máy tính cũng như những tác dụng to lớn của cơ sở toán học mà nhất là cácphương pháp hình học mang lại Đây là cơ sở để tác giả có thể tiếp tục phát triển

và xây dựng lên những chương trình đồ hoạ có tính ứng dụng cao phục vụ chocuộc sống

Chắc chắn chương trình còn có sai sót, rất mong nhận được sự đóng góp ýkiến của các thầy cô giáo và các bạn để giúp chương trình được hoàn thiện hơn

Ngày đăng: 15/03/2023, 10:31

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