Professional Documents
Culture Documents
MỤC LỤC 1
I. PHẦN ĐẶT VẤN ĐỀ 2
I.1/ Lý do chọn đề tài 2
I.2/ Mục tiêu nghiên cứu 2
I.3/ Nhiệm vụ nghiên cứu 2
I.4/ Đối tượng nghiên cứu 2
I.5/ Các phương pháp nghiên cứu 2
II. PHẦN NỘI DUNG 4
II.1/ Lịch sử của vấn đề nghiên cứu 4
II.2/ Cơ sở lý luận của đề tài 4
II.3/ Thực trạng của vấn đề nghiên cứu 4
II.4/ Nội dung nghiên cứu và kết quả nghiên cứu 4
A/ NỘI DUNG NGHIÊN CỨU 4
A.1) Lý thuyết cơ bản về hình học tính toán. 4
A.2) Các bài tập áp dụng. 14
A.3) Một số bài tập đề nghị. 19
A.4) Kết luận. 23
B/ KẾT QUẢ NGHIÊN CỨU 24
III. PHẦN KẾT LUẬN 24
III.1/ Kết luận 24
III.2/ Tài liệu tham khảo 25
1
I. PHẦN ĐẶT VẤN ĐỀ
I.1/ Lý do chọn đề tài
Để tiếp tục hoàn chỉnh chuyên đề bồi dưỡng HSG chuyên Tin “ỨNG DỤNG
LÝ THUYẾT TOÁN ĐỂ GIẢI CÁC BÀI TOÁN TIN”; qua quá trình nghiên cứu,
giảng dạy, tham khảo ý kiến đồng nghiệp, tôi thấy rằng hàng năm các đề thi tin học
trong khu vực cũng như Quốc gia có một số các bài toán trong lập trình tin học đề
cập nhiều đến các yếu tố hình học, cụ thể là hình học tính toán. Chính vì vậy tôi tiếp
tục chọn viết tiếp đề tài về chuyên đề “ỨNG DỤNG LÝ THUYẾT TOÁN ĐỂ GIẢI
CÁC BÀI TOÁN TIN” (Phần 3: Hình học tính toán).
I.2/ Mục tiêu nghiên cứu
Như đã biết, toán học có ảnh hưởng rất lớn đến mọi lĩnh vực của cuộc sống.
Các bài toán tin nếu có được thuật toán dựa trên cơ sở lý thuyết toán học vững chắc
sẽ đem lại kết quả tốt hơn rất nhiều so với các thuật toán khác. Giúp các em học sinh
có kiến thức tốt, tư duy tốt về lập trình; hình học tính toán là một trong những vấn đề
về kỹ thuật lập trình có ứng dụng tư duy toán học, cụ thể là hình học mà bất cứ
người lập trình tin học đều cần phải biết xử lý.
I.3/ Nhiệm vụ nghiên cứu
Trước hết là thực hiện đổi mới phương pháp giảng dạy Tin học làm cho học
sinh sáng tạo tìm những kết quả, lời giải hay trên một “dạng bài toán tin có sử dụng
toán học”; giúp bản thân nắm vững hơn nữa về lập trình, tư duy thuật toán, kỹ thuật
lập trình về hình học tính toán, đồng thời trao đổi và học tập kinh nghiệm ở Quý
Thầy Cô ở Tổ Tin học.
I.4/ Đối tượng nghiên cứu
Trong nghiên cứu này, các học sinh được chọn là các em học lớp chuyên Tin
học khối 10, 11, 12 và những học sinh bồi dưỡng chuẩn bị thi HSG cấp Tỉnh, cấp
Quốc gia thuộc một trường THPT Chuyên Tiền Giang và một số giáo viên đứng lớp
dạy tin học ở trường THPT đó.
I.5/ Các phương pháp nghiên cứu
2
* Phương pháp suy luận, tổng hợp: kết hợp từ nhiều nguồn tài liệu tham khảo
của các tác giả và tra cứu trên mạng internet với các đề thi Học sinh Giỏi rút ra
những kinh nghiệm, hệ thống lại kiến thức, mở ra các hướng mới.
* Phương pháp trò chuyện – phỏng vấn: trao đổi tâm tình với nhiều học sinh
giỏi để nắm tình hình trong việc giải các bài toán tin về hình học.
* Phương pháp khảo sát: bản thân được tham gia giảng dạy các lớp chuyên
tin, đội tuyển HSG, các kỳ tập huấn, ra đề; tham khảo đồng nghiệp, quý Thầy Cô đã
giảng dạy đội tuyển nhiều năm nên có nắm được tình hình sử dụng các phương pháp
làm bài của các em học sinh.
* Phương pháp phân tích lý luận: phân tích giúp học sinh nắm thật rõ bản chất
vấn đề, lựa chọn được phương pháp giải cho phù hợp.
3
II. PHẦN NỘI DUNG
II.1/ Lịch sử của vấn đề nghiên cứu
Trong những năm liên tiếp dạy học sinh các lớp chuyên tin, bồi dưỡng HSG
lớp 10, 11, 12 và đội tuyển thi HSG cấp Tỉnh, cấp Quốc Gia môn Tin học và bản
thân tôi được tham dự lớp “BỒI DƯỠNG TẬP HUẤN GIẢNG DẠY CHUYÊN ĐỀ
MÔN CHUYÊN TIN HỌC THPT” nhiều năm do Bộ GD&ĐT tổ chức. Tôi nhận
thấy kiến thức về Tin học của mình được nâng lên rõ rệt. Các bài giảng của các Thầy
NGUYỄN THANH TÙNG, Thầy ĐỖ ĐỨC ĐÔNG, Thầy LÊ MINH HOÀNG, cũng
như tham khảo ý kiến các đồng nghiệp chuyên dạy bồi dưỡng đội tuyển ở các Tỉnh
bạn, ở các trường THPT Chuyên, tôi rút ra một điều là “KIẾN THỨC TOÁN HỌC
RẤT QUAN TRỌNG DẠY LẬP TRÌNH TRONG TIN HỌC”. Được sự động viên
khuyến khích của quý Thầy Cô trong tổ, cũng như thầy LÊ NGỌC LINH, tôi mạnh
dạng tiếp tục chọn viết phần ba cho đề tài này là “Hình học tính toán”;
II.2/ Cơ sở lý luận của đề tài
Kết hợp bài giảng và các tài liệu tham khảo, kiến thức của bản thân để phân
tích, tổng hợp, hệ thống.
II.3/ Thực trạng của vấn đề nghiên cứu
Đa số học sinh chuyên tin rất ngại, sợ khi giải các bài toán tin về hình học
trong toán; rất lúng túng trong quá trình phân tích, tổ chức dữ liệu, thuật toán, kỹ
thuật lập trình để tìm ra bản chất và vận dụng kiến thức một cách thích hợp.
II.4/ Nội dung nghiên cứu và kết quả nghiên cứu
A/ NỘI DUNG NGHIÊN CỨU
A.1) Lý thuyết cơ bản về hình học tính toán
A.1.1) Kiến thức cơ bản của hình học
A.1.1.1) Tọa độ
a). Trục toạ độ
Trục toạ độ (trục) là một đường thẳng trên đó đã xác định một điểm gốc O và
một vectơ đơn vị e . Kí hiệu O; e .
Toạ độ của vectơ trên trục: u (a) u a.e .
4
Toạ độ của điểm trên trục: M (k ) OM k .e .
Độ dài đại số của
vectơ trên trục: AB a AB a.e .
Chú ý: + Nếu AB cuøng höôùng vôùi e thì AB AB .
Nếu AB ngöôïc höôùng vôùi e thì AB AB .
+ Nếu A(a), B(b) thì AB b a .
+ Hệ thức Sa–lơ: Với A, B, C tuỳ ý trên trục, ta có: AB BC AC .
b). Hệ trục toạ độ
Hệ gồm hai
trục toạ độ Ox, Oy vuông góc với nhau. Vectơ đơn vị trên Ox, Oy
lần lượt là i , j . O là gốc toạ độ, Ox là trục hoành, Oy là trục tung.
Toạ độ của vectơ đối với hệ trục toạ độ: u ( x; y ) u x .i y. j .
Toạ độ của điểm đối với hệ trục toạ độ: M ( x; y ) OM x .i y. j .
Tính chất: Cho a ( x; y), b ( x; y ), k R , A( x A ; y A ), B( xB ; yB ), C ( xC ; yC ) :
+ a b x x + a b ( x x ; y y ) + ka (kx; ky )
y y
+ b cùng phương với a 0 k R: x kx vaø y ky .
x y
(nếu x 0, y 0).
x y
+ AB ( xB x A ; yB y A ) .
x A xB y y
+ Toạ độ trung điểm I của đoạn thẳng AB: xI ; yI A B .
2 2
x x x y y y
+ Toạ độ trọng tâm G của tam giác ABC: xG A B C ; yG A B C .
3 3
x kxB y kyB
+ Toạ độ điểm M chia đoạn AB theo tỉ số k 1: xM A ; yM A .
1 k 1 k
( M chia đoạn AB theo tỉ số k MA k MB ).
A.1.1.2) Tích vô hướng (tích chấm)
a). Góc giữa hai vectơ
a
b
Cho a, b 0 . Từ một điểm O bất kì vẽ OA a , OB b . A
a
Khi đó a, b AOB với 00 0
AOB 180 . O
Chú ý: b
B
+ a, b = 900 a b
+ a, b = 00 a , b cùng hướng
+ a, b = 1800 a , b ngược hướng
+ a, b b , a
5
b). Tích vô hướng của hai vectơ
Định nghĩa: a.b a . b .cos a, b .
2
Đặc biệt: a.a a 2 a .
Tính chất: Với a, b , c bất kì và kR, ta có:
+ a.b b .a ; a b c a.b a.c ;
ka .b k a.b a. kb ;
a 2 0; a 2 0 a 0 .
2
+ a b a 2 2 a.b b 2 ; a b 2 a 2 2 a.b b 2 ;
a 2 b 2 a b a b .
+ a.b > 0 a, b nhọn + a.b < 0 a, b tù
a.b = 0 a, b vuông.
c). Biểu thức toạ độ của tích vô hướng
Cho a = (a1, a2), b = (b1, b2). Khi đó: a.b a1b1 a2 b2 .
a1b1 a2 b2
a a12 a22 ; cos(a , b ) ; a b a1b1 a2 b2 0
a12 a22 . b12 b22
6 6
Bằng công cụ đại số tuyến tính, người ta chứng minh được công thức của tích
chéo giữa hai vecto u xu , yu và v xv , yv như sau:
x x
u v xu yv xv yu u v
yu yv
6
xu xv
tức là giá trị của tích chéo bằng định thức của ma trận . Từ đó ta suy ra
y
u vy
công thức tính sin của góc định hướng giữa hai vecto u xu , yu và v xv , yv :
uv xu yv xv yu
sin
u .v ( xu2 y2u )(x 2v +y2v
Về mặt hình học, giá trị tuyệt đối của tích chéo u v là diện tích hình bình
hành OABC, trong đó O là gốc tọa độ, OA u , OC v và OB u v
Tích chéo có một ứng dụng quan trọng trong việc khảo sát chiều: Giả sử ta đi
từ điểm A sang điểm B theo đường thẳng và đi tiếp sang điểm C theo đường thẳng,
khi đó:
- Tích chéo AB BC sẽ là số dương nếu chỗ rẽ tại B là “rẽ trái” (hay nói đúng
hơn là bẻ góc ngược chiều kim đồng hồ);
- Tích chéo AB BC là số âm nếu chỗ rẽ B là “rẽ phải”;
- Tích chéo AB BC = 0 có nghĩa là ba điểm A, B, C thẳng hàng.
A C B
A
CCW CW
B
C
8
x y
đi qua hai điểm A(a; 0), B(0; b) (a, b 0): Phương trình của : 1.
a b
(phương trình đường thẳng theo đoạn chắn) .
đi qua điểm M0 ( x0 ; y0 ) và có hệ số góc k: Phương trình của :
y y0 k ( x x0 )
(phương trình đường thẳng theo hệ số góc)
f). Vị trí tương đối của hai đường thẳng
Cho hai đường thẳng 1: a1 x b1y c1 0 và 2: a2 x b2 y c2 0 .
Toạ độ giao điểm của 1 và 2 là nghiệm của hệ phương trình:
a1 x b1y c1 0
(1)
a2 x b2 y c2 0
a1 b1
1 cắt 2 hệ (1) có một nghiệm (nếu a2 , b2 , c2 0 )
a2 b2
a1 b1 c1
1 // 2 hệ (1) vô nghiệm (nếu a2 , b2 , c2 0 )
a2 b2 c2
a1 b1 c1
1 2 hệ (1) có vô số nghiệm (nếu a2 , b2 , c2 0 )
a2 b2 c2
g). Góc giữa hai đường thẳng
Cho hai đường thẳng 1: a1 x b1y c1 0 (có VTPT n1 (a1; b1 ) )
và 2: a2 x b2 y c2 0 (có VTPT n2 (a2 ; b2 ) ).
(n , n )
khi (n1 , n2 ) 900
(
1 , 2 ) 1 0 2 0
180 ( n1 , n2 ) khi ( n1 , n2 ) 90
n1.n2 a1b1 a2 b2
cos(1 , 2 ) cos( n1 , n2 )
n1 . n2 a12 b12 . a22 b22
Chú ý: 1 2 a1a2 b1b2 0 .
Cho 1: y k1 x m1 , 2: y k2 x m2 thì:
+ 1 // 2 k1 = k2 + 1 2 k1. k2 = –1.
h). Khoảng cách từ một điểm đến một đường thẳng
Khoảng cách từ một điểm đến một đường thẳng
Cho đường thẳng : ax by c 0 và điểm M0 ( x0 ; y0 ) .
ax0 by0 c
d ( M0 , )
a2 b2
Vị trí tương đối của hai điểm đối với một đường thẳng
Cho đường thẳng : ax by c 0 và hai điểm M ( xM ; yM ), N ( x N ; y N ) .
9
– M, N nằm cùng phía đối với (axM by M c )(ax N by N c ) 0 .
– M, N nằm khác phía đối với (axM by M c )(ax N by N c ) 0 .
Phương trình các đường phân giác của các góc tạo bởi hai đường thẳng
Cho hai đường thẳng 1: a1 x b1y c1 0 và 2: a2 x b2 y c2 0 cắt nhau.
Phương trình các đường phân giác của các góc tạo bởi hai đường thẳng 1 và
2 là:
a1 x b1y c1 a2 x b2 y c2
a12 b12 a22 b22
A.1.1.5) Đa giác
Đa giác là một đường gấp khúc khép kín. Trong lập trình, một đa giác được
lưu bởi một dãy các đỉnh liên tiếp nhau A1, A2, …,An
Diện tích đại số của một đa giác không tự cắt có thể được xác định bởi công
( x1 x2 )( y1 +y 2 )+(x 2 -x 3 )(y2 +y 3 )+...+(x n -x1 )(y n +y1 )
thức: S
2
S chính là diện tích của đa giác.
10
A.1.2) Các giải thuật về hình học trong tin học
A.1.2.1) Khai báo kiểu các đối tượng trong Pascal
Type
TPoint = Record
x, y: Float;
End;
TVector = Tpoint;
11
A.1.2.3) Tìm giao điểm hai đường thẳng
Trên mặt phẳng với hệ tọa độ Đề-các vuông góc cho hai đường thẳng với
phương trình tổng quát:
A1x + B1y + C1 = 0; A2x + B2y + C2 = 0;
Bài toán đặt ra là xác định giao điểm hai đường thẳng đã cho.
Đặt u (A1;A 2 ), v ( B1 ; B2 ), w (C1 ; C2 ) , bài toán trở thành bài toán biểu
diễn vector w qua tổ hợp tuyến tính của hai vector u và v
w x.u y.v
Việc còn lại chỉ là biện luận cho giá trị giao điểm tìm được, lúc đó ta sẽ viết
thêm hàm vector và toán tử tích chéo sau:
Hàm vector
12
A.1.2.5) Tìm giao điểm giữa một đoạn thẳng và một tia
Tương tự, để tìm giao điểm duy nhất giữa đoạn thẳng AB và tia CD, ta có thể
sử dụng phương pháp tương tự như trên: Nếu M là giao điểm duy nhất của đoạn
thẳng AB và tia CD thì sẽ tồn tại duy nhất một cặp số thực p, q, trong đó
p [0;1], q [0; ) sao cho
AM p AB
CM qCD
Áp dụng thuật toán như trên, chỉ có điều sau khi tìm được cặp số p, q, ta
không kiểm tra p, q [0;1] mà kiểm tra p [0;1] và q > 0.
A.1.2.6) Tìm diện tích đa giác
Bài toán: Tính diện tích đa giác (lồi hoặc lõm và không tự cắt) gồm n đỉnh
A[1], A[2], …, A[n] (n>2).
Thuật toán: Ta có thể giải bài toán này bằng cách chia đa giác thành n − 2 tam
giác rồi tính tổng diện tích của các tam giác ấy. Tuy nhiên phương pháp này phức
tạp, ta làm cách khác như sau: chia đa giác thành các hình thang bằng cách chiếu các
cạnh xuống trục hoành (hoặc trục tung). Hình thang được xác định bởi cạnh
A[i]A[i+1] có diện tích là Abs(S) với:
S = (A[i].x - A [i+1].x).(A[i].y + A[i+1].y) /2;
sau khi gán đỉnh A[n+1] = A[1], ta tính diện tích toàn phần của đa giác như sau:
Procedure dientich;
Begin
S: = 0;
For i: =1 to n do
S := S + (A[i].x - A [i+1].x).(A[i].y + A[i+1].y);
S: = (1/2) * Abs(S);
End;
13
A.2) Một số bài tập áp dụng
I. Dạng mối quan hệ giữa các yếu tố hình học
Bài 1. Kiểm tra tính lồi lõm của một đa giác.
Trong mặt phẳng toạ độ có n điểm có toạ độ tương ứng là (x1, y1), (x2, y2)
,…, (xn, yn). Biết rằng n điểm đã cho theo thứ tự tạo thành các đỉnh của một đa giác
không tự cắt.
Yêu cầu: hãy kiểm tra đa giác lồi hay lõm.
Dữ liệu vào: ghi trong file dagiac.inp dòng đầu ghi một số n (n>2), n dòng tiếp
theo, trên dòng thứ i ghi hai số thực theo thứ tự là hoành độ và tung độ của đỉnh thứ
i-1 của đa giác.
Dữ liệu ra: ghi vào file dagiac.out gồm một số 0 hoặc 1, ghi 0 nếu đa giác lõm
và ghi 1 nếu đa giác lồi.
Thuật toán: Gọi diện tích của đa giác là S0. Ta sẽ so sánh S0 với các Si,
trong đó Si là diện tích của đa giác thu được từ đa giác ban đầu sau khi bỏ đi đỉnh
thứ i (i=1, 2,…, n). Nếu $ i sao cho Si > S0 thì đa giác đã cho lõm (tại đỉnh thứ i),
ngược lại thì đa giác đã cho lồi.
Chương trình:
type read(f,a[i].x);
diem=record read(f,a[i].y);
x,y:real; end;
end; close(f);
var a:array [1..100] of diem; a[n+1]:=a[1];
n,vt:integer; {Tinh dien tich da giac}
s0,s1:real; s0:=0;
procedure init; for i:=1 to n do
var f:text;i:byte; s0:=s0+(a[i+1].x-
begin a[i].x)*(a[i+1].y+a[i].y);
assign(f,’dagiac.inp’); s0:=abs(s0)/2
reset(f); end;
readln(f,n); Procedure Inkq(i:byte);
{while not eof(f) do} var f:text;
For i:= 1 to n do begin
begin assign(f,’dagiac.out’);
14
rewrite(f); s1:=s1+(b[j+1].x-
write(f,i); b[j].x)*(b[j+1].y+b[j].y);
close(f); s1:=abs(s1)/2;
end; if s1>s0 then
Procedure resolve; begin
var b: array [1..50] of diem; inkq(0);
i,j,k:byte; halt
Begin end;
for i:=1 to n do end;
begin inkq(1);
for j:=1 to i-1 do b[j]:=a[j]; End;
for j:=i+1 to n+1 do b[j-1]:=a[j]; begin
s1:=0; init;
for j:=1 to n-1 do resolve;
end.
Bài 2. Chia đa giác (đề thi HS giỏi quốc gia lớp 12, bảng B, năm 1999- 2000).
Trong mặt phẳng toạ độ có n điểm có toạ độ tương ứng là (x1, y1), (x2,
y2),…,(xn, yn). Biết rằng n điểm đã cho theo thứ tự tạo thành các đỉnh của một đa
giác không tự cắt.
Yêu cầu: hãy chia đa giác đã cho thành hai đa giác bởi một cạnh nối hai đỉnh
không kề nhau sao cho diện tích của chúng chênh lệch nhau ít nhất.
Dữ liệu vào: ghi trong file dagiac.inp: dòng đầu ghi một số n (n>3), n dòng
tiếp theo, trên dòng thứ i ghi hai số thực theo thứ tự là hoành độ và tung độ của đỉnh
thứ i-1của đa giác.
Dữ liệu ra: ghi vào file dagiac.out gồm hai số nguyên dương chỉ số thứ tự của
hai đỉnh được nối sao cho thoả mãn điều kiện đầu bài.
Thuật toán: Ta đưa ra thuật toán rất đơn giản như sau: thử tìm mọi cách chia
và ghi nhận lại cách chia tốt nhất. Dễ thấy độ phức tạp của thuật toán trong trường
hợp này là O(n3).
Chương trình:
type x,y:real;
diem = record end;
15
var a:array [1..100] of diem; begin
n,vt1,vt2:integer; k:=0;
s0,s1,del:real; for j:= i to h do
procedure init; begin
var f:text;i:byte; inc(k);
begin b[k]:=a[j];
assign(f,’dagiac.inp’); end;
reset(f); b[k+1]:=b[1];
readln(f,n); s1:=0;
for i:= 1 to n do for j:=1 to k do
begin s1:=s1+(b[j+1].x-
read(f,a[i].x); b[j].x)*(b[j+1].y+b[j].y);
read(f,a[i].y); s1:=abs(s1)/2;
end; if del>abs(2*s1-s0) then
close(f); begin
a[n+1]:=a[1]; vt1:=i;
s0:=0; vt2:=j;
for i:=1 to n do del:=abs(2*s1-s0);
s0:=s0+(a[i+1].x- end;
a[i].x)*(a[i+1].y+a[i].y); end;
s0:=abs(s0)/2; end;
del:=s0; assign(f,’dagiac.out’);
end; rewrite(f);
Procedure resolve; write(f,vt1,’ ’,vt2);
var b:array [1..50] of diem; close(f);
i,j,k,h:byte; End;
f:text; begin
Begin init;
for i:=1 to n-2 do resolve;
begin end.
for h:=i+2 to n-1 do
Bài 3. Cho một đa giác và một điểm. Hãy cho biết điểm đã cho có thuộc đa
giác hay không (điểm đó thuộc cạnh đa giác cũng coi như là thuộc đa giác)
Dữ liệu vào: n (số đỉnh của đa giác)
x1, y1
…
xi, yi (là tọa độ lần lượt từng đỉnh đa giác theo chiều kim đồng hồ).
2
xn yn
x0, y0: tọa độ điểm cần xét.
Dữ liệu ra: 'Thuộc đa giác' hoặc 'Không thuộc đa giác'
Thuật toán:
- Qua điểm A cần xác định, dựng tia Ax’ sao cho Ax’//Ox.
- Xác định số giao điểm tia Ax’ với cạnh đa giác.
- Xét số giao điểm
+ lẻ: điểm A thuộc đa giác
+ chẵn: điểm A không thuộc đa giác.
Đặc biệt hóa bài 3.
a. Chúng ta xét trường hợp đặc biệt của bài 3. Ta sẽ thay 'đa giác' bằng tam
giác.
Khi xét 1 tam giác, chúng ta sẽ nảy ra một 'ý tưởng' khác từ nhận xét sau:
Xét 1 điểm M thuộc ABC thì: SABC = SMAB + SMBC + S MAC
Còn nếu M không thuộc ABC thì: SABC < SMAB + SMBC + S MAC
Như vậy, với tam giác, ta có giải thuật sau:
- Tính SABC {có thể dùng công thức Herong hay bằng công thức:
AB AC
S= }
2
b. Cho tứ diện. Hãy cho biết tâm hình cầu ngoại tiếp tứ diện nằm trong hay
ngoài tứ diện.
II. Dạng lớp bài toán về diện tích
1. Tính diện tích đa giác cho trước. Đây là bài toán quen thuộc, cần nhớ để
vận dụng các bài toán khác.
2. Bài toán về diện tích phủ: Cho một số hình chữ nhật, hãy tính diện tích mà
các hình chữ nhật trên phủ. VD: - Tính SMAB + SMBC + S MAC =S’
2
- Xét:
+ SABC = S’ → M thuộc ABC
+ SABC ≠ S’ → M không thuộc ABC.
3. Tổng quát hóa bài toán 2: Bây giờ, chúng ta thử tổng quát bài toán 2 từ 'tam
giác' lên 'tứ diện' xem sao: {Các tọa độ điểm bây giờ có dạng (x,y,z)}
Chúng ta cũng xuất phát từ nhận xét:
- M thuộc ABCD thì VABCD = VMABC + VMBCD +VMCDA + VMDAB
- M không thuộc ABCD thì VABCD < VMABC + VMBCD +VMCDA + VMDAB Chúng
ta hoàn toàn có thể tính được dễ dàng thể tích 1 tứ diện bằng công thức:
b. Cho tứ diện. Hãy cho biết tâm hình cầu ngoại tiếp tứ diện nằm trong hay
ngoài tứ diện.
3
A.3) Một số bài tập đề nghị
Bài 1: Diện tích phủ bởi các tam giác
Trên mặt phẳng cho N tam giác được xác định bởi toạ độ của ba đỉnh (x1i, y1i),
(x2i, y2i), (x3i, y3i) (i=1,2...,N). Tất cả các toạ độ đều là số nguyên. Cần tìm diện tích
của phần mặt phẳng bị phủ bởi các tam giác này. Giả thiết là tất cả các tam giác
không suy biến (nghĩa là 3 đỉnh của tam giác là ba điểm phân biệt và không nằm trên
cùng một đường thẳng)
Input: File văn bản TAMGIAC.INP
Dòng đầu tiên ghi số nguyên dương N (N≤10)
Dòng thứ i trong N dòng tiếp theo chứa 6 số nguyên x1i, y1i, x2i, y2i, x3i, y3i xác
định tam giác thứ i (i=1,2,...,N). Các số nguyên có giá trị tuyệt đối không vượt
quá 1000.
Output: Ghi ra file TAMGIAC.OUT duy nhất một số là giá trị của diện tích cần tìm
với 2 chữ số phần thập phân
Ví dụ:
TAMGIAC.INP TAMGIAC.OUT
2 2.00
002012
002011
Bài 2: Đa giác
Cho N đa giác lồi thoả mãn các tính chất sau:
- Với 2 đa giác bất kỳ luôn có một đa giác mà mọi điểm của nó nằm trong đa
giác kia
- Các cạnh của chúng không có điểm chung
Bài toán đặt ra là: Với mỗi đa giác i, có bao nhiêu đa giác trong N đa giác nói
trên bao nó (i nằm trong bao nhiêu đa giác)?.
Dữ liệu vào: Vào từ file văn bản DAGIAC.INP
- Dòng đầu tiên ghi số tự nhiên N (3N10000)
4
- Dòng thứ i+1 ghi thông tin về đa giác thứ i, bao gồm: Số đầu tiên Si là số
đỉnh của đa giác; Si cặp số nguyên tiếp theo lần lượt là hoành độ và tung độ các đỉnh
của đa giác. Các số trên cùng dòng cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản DAGIAC.OUT gồm N dòng, dòng thứ i ghi số
lượng các đa giác bao đa giác i.
Ví dụ:
DAGIAC.INP DAGIAC.OUT
4 0
4 1 1 15 1 15 8 1 8 2
493964643 1
4 3 2 11 2 11 7 3 7 3
3848568
5
0 0
2 0
2 2
0 2
Bài 4: POLYGON
Đức vua vương quốc XYZ tổ chức kén rể cho cô công chúa duy nhất của
mình. Vì vậy, ông đặt ra những yêu cầu rất cao cho con rể tương lai. Để có thể trở
thành con rể của ngài, các chàng trai thi nhau thể hiện mình. Sau khi vượt qua những
phần thi đòi hỏi sức khoẻ, lòng dũng cảm, … họ sẽ gặp phải một thử thách vô cùng
khó khăn, đó là phần thi về sự nhanh nhạy và thông minh. Đức vua sẽ cho mỗi người
một miếng bìa hình đa giác lồi N đỉnh. Đức vua yêu cầu các chàng trai vẽ N-3 đường
chéo bất kì sao cho 2 đường chéo bất kì không có điểm chung khác các đầu mút. Với
cách vẽ như vậy, chúng ta sẽ thu được N-2 hình tam giác. Đức vua yêu cầu họ hãy
tìm 2 cách chia:
Một cách chia sao cho tam giác có diện tích lớn nhất trong N-2 tam giác là lớn
nhất.
Một cách chia sao cho tam giác có diện tích lớn nhất trong N-2 tam giác là
nhỏ nhất.
Sau khi nhà vua đưa ra hình dạng của đa giác lồi, họ sẽ chỉ có 1 giây để đưa ra
đáp án của mình. Người đưa ra đáp án đúng nhất và nhanh nhất sẽ được chọn làm
phò mã. Bạn cũng là một người đã lọt vào vòng thi này. Hãy chứng tỏ khả năng của
mình đi!
Input: POLYGON.INP
Dòng đầu tiên ghi số nguyên N là số đỉnh của đa giác.
Trong n dòng sau, mỗi dòng ghi một cặp số nguyên là tọa độ các đỉnh của đa
giác. Các đỉnh được liệt kê theo chiều kim đồng hồ.
Output: POLYGON.OUT
Trong mỗi trường hợp, bạn cần đưa ra N-3 dòng. Mỗi dòng ghi số hiệu 2 đỉnh
mà bạn nối. N-3 dòng của trường hợp 1 cần được viết trước N-3 dòng của trường
hợp 2.
6
Giới hạn:
4 ≤ N ≤ 200.
Các tọa độ là các số nguyên có trị tuyệt đối không quá 106.
Thời gian: 1s/test.
Bộ nhớ: 1MB
Ví dụ:
POLYGON.INP POLYGON.OUT Trường hợp 1 Trường hợp 2
5 13
00 35
02 14
14 24
22
20
7
Kết quả: Xuất ra file văn bản CAKE.OUT gồm 1 số duy nhất ghi diện tích
lớn nhất của tứ giác tìm được. Kết quả lấy chính xác tới 1 chữ số phần thập phân.
Ví dụ:
CAKE.INP CAKE.OUT
6 21.0
2 1
2 3
5 7
8 3
8 1
5 0
Giới hạn :
4 ≤ N ≤ 1500
|xi|, |yi| ≤ 15000
Thời gian: 1 giây
Bộ nhớ : 1M
A.4) Kết luận
Tin học và Toán học là hai bộ môn khác biệt nhưng không độc lập với nhau.
Biết vận dụng những kết quả và những suy luận, chứng minh từ toán học sẽ làm cho
những bài toán tin được giải thật đơn giản, và kết quả rất tốt.
Như vậy, Tin học đã sử dụng Toán học rất nhiều. Đặc biệt là những bài toán
về hình học tính toán được phân tích, suy luận dựa vào các định lý, bổ đề trong toán
học mà Tin học đã xây dựng được những thuật toán, giải thuật rất hữu dụng, ngày
nay việc tính toán các bài hình học trong toán không còn là vấn đề khó khăn như
trước đây chưa có sử dụng tin học.
8
B/ KẾT QUẢ NGHIÊN CỨU
Qua quá trình nghiên cứu và vận dụng đề tài chuyên đề “ỨNG DỤNG LÝ
THUYẾT TOÁN ĐỂ GIẢI CÁC BÀI TOÁN TIN” phần 3 – Hình học tính toán, tôi
nhận thấy vấn đề này giúp ích rất nhiều cho học sinh chuyên tin học trong việc học,
giúp các em không còn “ngán ngại” chuyên đề này nữa, các em đã hiểu và vận dụng
khá tốt những phần liên quan đến toán học cũng như tin học (như thuật toán kiểm tra
điểm nằm trong đa giác, diện tích đa giác, giao điềm của các đường thẳng…); một số
em đã bước đầu sáng tạo được những bài toán mới (tuy là những bài toán còn “đơn
giản”). Riêng bản thân tôi sẽ tiếp tục nghiên cứu sâu hơn nữa về chuyên đề này hy
vọng sẽ “làm rõ hơn nữa” để học sinh chuyên tin thích học và đạt nhiều thành tích
hơn nữa.
III. PHẦN KẾT LUẬN
III.1/ Kết luận
Tôi viết đề tài nghiên cứu nhằm mục đích cùng trao đổi với Quý Thầy Cô dạy
chuyên đề bồi dưỡng học sinh giỏi Tin học về việc “hệ thống” các kiến thức, một vài
kỹ năng, ứng dụng toán học vào lập trình giải quyết các bài toán tin. Vì kiến thức và
thời gian còn nhiều hạn chế nên chắc rằng nghiên cứu còn có thiếu sót, tôi chân
thành đón nhận sự góp ý của Quý Thầy Cô. Xin chân thành cảm ơn.
9
III.2/Tài liệu tham khảo
1. Nguyễn Xuân Huy, 2008, tuyển các bài toán tin nâng cao cho học sinh và
sinh viên giỏi “Sáng tạo trong thuật toán và lập trình”, NXB Giáo dục, tập 1, tập 2,
tập 3.
2. Hồ Sĩ Đàm, Đỗ Đức Đông, Lê Minh Hoàng, Nguyễn Thanh Hùng, 2009, “Tài
liệu giáo khoa chuyên tin”, NXB Giáo dục, quyển 1, quyển 2, quyển 3.
3. Donald E. Knuth, The Art of computer programming
4. Kenneth H. Rosen, Toán học rời rạc ứng dụng trong tin học, NXB Giáo dục,
2007, người dịch Phạm Văn Thiều và Đặng Hữu Thịnh.
5. Các đề thi HSG Olympic 30/4.
6. Các đề thi HSG ĐBSCL.
7. Các đề thi HSG Quốc gia.
8. Các đề thi HSG Quốc tế.
9. Một số trang web: http://vnoi.info/index.php?...Olympic Tin học Việt Nam.
10