Tải bản đầy đủ (.doc) (25 trang)

ỨNG DỤNG VECTO VÀO GIẢI QUYẾT MỘT SỐ BÀI TOÁN HÌNH HỌC TRONG TIN HỌC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (350.26 KB, 25 trang )

SỞ GIÁO DỤC VÀ ĐÀO TẠO NAM ĐỊNH
TRƯỜNG TRUNG HỌC PHỔ THÔNG CHUYÊN LÊ HỒNG PHONG
NAM ĐỊNH
SÁNG KIẾN DỰ THI CẤP TỈNH

BÁO CÁO SÁNG KIẾN

ỨNG DỤNG VECTO
VÀO GIẢI QUYẾT
MỘT SỐ BÀI TOÁN HÌNH HỌC
TRONG TIN HỌC

Tác giả: Đỗ Thị Minh Hường
Trình độ chuyên môn: Thạc sỹ
Chức vụ: giáo viên
Nơi công tác: trường trung học phổ thông chuyên
Lê Hồng Phong Nam định

Nam định, ngày 15 tháng 5 năm 2015
1


1.Tên sáng kiến:
Ứng dụng vecto vào giải quyết một số bài toán hình học trong tin học.
2. Lĩnh vực áp dụng sáng kiến:
Các trường THPT chuyên dạy cho học sinh chuyên và tập huấn cho học
sinh dự kỳ thi học sinh giỏi Quốc gia môn Tin học Lớp 12.
3. Thời gian áp dụng sáng kiến: từ năm 2010 đến 2015
4.Tác giả:
Họ và tên: Đỗ Thị Minh Hường
Năm sinh: 1973


Nơi thường trú: 9/581 đường Trường Chinh phường Hạ Long, thành phố
Nam Định
Trình độ chuyên môn: Thạc sỹ
Chức vụ công tác: giáo viên
Nơi làm việc: trường THPT chuyên Lê Hồng Phong
Địa chỉ liên hệ: 9/581 đường Trường Chinh, phường Hạ Long thành phố Nam
Định.
Điện thoại: 0983.846.411
5. Đơn vị áp dụng sáng kiến:
Tên đơn vị: trường THPT chuyên Lê Hồng Phong
Địa chỉ: 76 Vị Xuyên, thành phố Nam Định
Điện thoại: 0350.3640.297

2


BÁO CÁO SÁNG KIẾN
I. ĐIỀU KIỆN HOÀN CẢNH TẠO RA SÁNG KIẾN
Trong toán học có rất nhiều bài toán nếu dùng các giải pháp thông
thường để giải quyết có thể rất dài và phức tạp, nhưng khi dùng vecto vào giải
quyết thì vấn đề trở nên đơn giản và rất ngắn gọn. Chính vì vậy khi dạy
chuyên đề hình học cho học sinh khối chuyên tin tôi thiết nghĩ tại sao không
dùng vecto vào giải quyết cho lập trình một số bài toán hình học cho học sinh.
Những vấn đề này trong toán học các em đều được học trong chương trình
phổ thông, nếu giúp các em có thể áp dụng những vấn đề này vào tin học thì
chắc chắn việc đưa ra thuật toán và cách giải cho nhiều bài toán sẽ trực quan
và cài đặt sẽ dễ dàng thuận lợi.
II. MÔ TẢ GIẢI PHÁP
1. Mô tả giải pháp trước khi tạo ra sáng kiến
Khi dạy cho học sinh khối chuyên tin tôi thấy khả năng về toán của các

em hầu hết đều không tốt và đặc biệt là chưa có phương pháp học kế thừa
những đơn vị kiến thức đã học. Tất cả những vấn đề giáo viên đưa ra hoặc đọc
tài liệu hầu như các em đều cho là mới tinh và chưa biết tìm hiểu những vấn
đề này được xây dựng và kế thừa từ những đơn vị kiến thức nào đã học để suy
luận và từ đó có thể đưa ra những vấn đề mới được tổng hợp từ những vấn đề
đã biết. Chính vì vậy, tôi xây dựng hệ thống chuyên đề về vecto được biết
trong toán học và phương pháp biểu biễn trong tin học các yếu tố hình học
trong lập trình dưới dạng kế thừa các đơn vị kiến thức đã biết, giúp học sinh
có thể đọc, hiểu và đặc biệt là làm quen phương pháp biết kế thừa những kiến
thức cũ để xây dựng lý thuyết mới và đặc biệt là giúp các em có một phương
pháp giải quyết một số bài toán hình học trong kì thi học sinh giỏi các cấp.
2. Mô tả giải pháp sau khi có sáng kiến

3


Hình học đối với giác quan của con người thì khá quen thuộc và dễ dàng.
Nhưng hình học đối với máy tính thì lại là một vấn đề khác. Nhiều bài toán ta
có thể giải ngay lập tức bằng cách “nhìn vào hình vẽ ta thấy”, nhưng để thể
hiện trên máy tính thì cần những chương trình không đơn giản chút nào.
Các giải thuật hình học thường là các giải thuật đẹp và đôi khi là rất bất
ngờ. Thực vậy, những tưởng có những bài toán ta phải giải quyết với chi phí
thuật toán rất lớn (đôi khi không thể chấp nhận được), nhưng nhờ vào chính
những tính chất đặc biệt của hình học mà ta lại có thể giải quyết nó một cách
dễ dàng và “đẹp mắt”.
A. Một số khái niệm cơ bản
1. Hệ tọa độ Đề các

r r


Trong mặt phẳng, cho hệ tọa độ Đề các Oxy có i , j lần lượt là hai vecto
r

r

đơn vị trên trục Ox, Oy. Chiều quay từ i tới j là chiều thuận (ngược chiều
kim đồng hồ).
2. Tọa độ
r
r
- Trong mặt phẳng tọa độ Oxy, cho hai vectơ u ( xu ; yu ) ; v ( xv ; yv ) và k là một
số thực. Khi đó ta có các kết quả trong toán học (hình tọa độ trong mặt phẳng
ở lớp 10 PTTH):
r
r
+) i ( 1;0 ) ; j ( 0;1)
r r

+) u + v = ( xu + xv ; yu + yv )
r r
 xu = xv
u
+) = v ⇔ 
 yu = yv
r
+) k .u = ( k .xu ; k . yu )
r
+) Độ dài vectơ u = xu 2 + yu 2

- Các công thức về tọa độ điểm: Cho điểm A(xA; yA) ; B(xB; yB)

uuur
+) Tọa độ vectơ AB = ( xB − x A ; yB − y A )
 x A + xB y A + y B 
;
÷
2 
 2

+) I là trung điểm AB thì tọa độ I 

4


+) Độ dài đoạn thẳng AB = ( xA − xB ) + ( y A − yB )
2

2

- Hai phép toán đối với hai vecto

r

r

+) Tích chấm (tích vô hướng) của hai vecto: Cho hai vecto u và v , tích vô
r

r

r r


hướng của hai vecto u và v , được ký hiệu là u . v được tính bằng tích độ dài
r

r

của hai vecto u và v nhân với cosin của góc xen giữa hai vecto đó (góc này là
góc không định hướng có số đo nằm trong đoạn từ 0 đến π).
rr r r
rr
u.v = u . v .cos u, v
r
r
rr
Nếu tọa độ của u = ( xu ; yu ) ; v = ( xv ; yv ) thì u.v = xu .xv + yu . yv

( )

r

Từ công thức này ta có thể tính được cosin của góc tạo bởi giữa hai vecto u
r

và v

rr
r r
u.v
cos u , v = r r =
u.v


(

xu .xv + yu . yv

)

x + yu2 . xv2 + yv2
2
u

r

r

+) Góc định hướng giữa hai vecto: Cho hai vecto u và v , góc định hướng
r

r

giữa hai vecto u và v là góc lượng giác giữa hai vecto này, dấu của góc là
r

r

dương nếu chiều từ u đến v là ngược chiều kim đồng hồ và mang dấu âm
theo chiều ngược lại.

r


r

r

+) Tích chéo của hai vecto: Cho hai vecto u và v , tích chéo của hai vecto u
r

r r

r

r

và v , được ký hiệu là u × v được tính bằng tích độ dài của hai vecto u và v

nhân với sin của góc xen giữa hai vecto đó (góc này là góc định hướng có số
đo nằm trong đoạn từ -π đến π).

rr r r
rr
u.v = u . v .sin u, v

( )

r r
r
r
xu
u
u

=
x
;
y
;
v
=
x
;
y
(
)
(
)
Nếu tọa độ của
thì × v = xu . yv − xv . yu =
u
u
v
v
yu

xv
yv
r

Từ công thức trên ta có thể tính được sin của góc định hướng giữa hai vecto u
r

và v


r r
u×v
sin α = r r =
u.v

xu . yv − xv . yu
x + yu2 . xv2 + yv2
2
u

5


+) Ứng dụng của tích chéo trong khảo sát chiều:
Giả sử ta đi từ điểm A sang điểm B theo một đường thẳng và đi tiếp
uuur uuur uuur uuur
sang C theo đường thẳng, khi đó ta xét: T = AB × BC = AB . BC .sin α , trong đó
uuur

uuur

α là góc định hướng giữa hai vecto AB và BC .
Ta thấy dấu của T phụ thuộc vào dấu của góc α.
- Nếu T < 0 thì chỗ rẽ tại B là “rẽ phải”
- Nếu T > 0 thì chỗ rẽ tại B là “rẽ trái”
- Nếu T = 0 thì ba điểm A, B, C thẳng hàng.
3. Đổi hệ trục tọa độ
Bài toán:


r r

Cho hai hệ tọa độ trực chuẩn trên mặt phẳng (O; i ; j ) và (O’;

r ur
r ur
i ' ; j ' ). Giả sử điểm M có tọa độ M(x; y) đối với hệ tọa độ (O’; i ' ; j ' ). Hãy
r r
xác định tọa độ điểm M đối với hệ tọa độ (O; i ; j )?

Giải

r r

r

Giả sử trong hệ tọa độ (O; i ; j ), điểm O’ có tọa độ O’(p, q), vecto i '
ur

=(a; b); j ' = (c; d)
Khi đó ta có:

uuuur
r r
OO ' = p.i + q. j
r
r r
i ' = a.i + b. j
ur r
r

j ' = c.i + d . j

r ur

Điểm M có tọa độ (x; y) đối với hệ toạ độ (O’; i ' ; j ' ), khi đó ta có:
uuuuur
r
ur
O ' M = x.i ' + y. j '

Do đó

uuuur uuuur uuuuur
r r
r
ur
r r
r r
r
r
OM = OO ' + O ' M = p.i + q. j + x.i ' + y. j ' = p.i + q. j + x. a.i + b. j + y. c.i + d . j
r
r
= ( ax + cy + p ) .i + ( bx + dy + q ) . j
r r
Suy ra tọa độ điểm M đối với hệ toạ độ (O; i ; j ) là M(ax+by+p; bx+dy+q)

(

Khi đó ta có công thức đổi tọa độ như sau:

r r

r

)

ur

(

)

Giả sử trong hệ tọa độ (O; i ; j ) điểm O’(p; q); i ' =(a; b); j ' =(c; d) và M(
x; y ) .

6


 x = a.x + c. y + p

r ur

Trong hệ tọa độ (O’; i ' ; j ' ) điểm M(x; y) và thì 

 y = b.x + d . y + q

4. Xây dựng công thức biến đổi tọa độ
Trong hình học phẳng có các phép biến hình nhằm biến đổi từ hình này
sang hình khác đồng dạng với nó. Các phép biến hình này rất quan trọng trong
việc thiết kể các bài toán liên quan đến hình trong tin học. Ở đây ta nghiên

cứu cách xây dựng các công thức biến đổi tọa độ của các phép biến hình này.
r r

Trong hệ tọa độ đề các (O; i ; j ), chọn điểm I(1; 0) và J(0; 1). Với phép
đồng dạng f, ta thực hiện f trên ba điểm O, I, J để nhận được ba ảnh tương ứng
của chúng theo thứ tự là O’, I’, J’. Từ đó xác định tọa độ điểm O’(p; q); vecto
r uuuur
ur uuuuur
i ' = O ' I ' = ( a; b ) và vecto j ' = O ' J ' = ( c; d ) .
Vì đây là phép biến đổi đồng dạng nên điểm M có tọa độ (x; y) đối với
r r

r ur

hệ tọa độ (O; i ; j ) thì nó cũng có tọa độ (x; y) đối với hệ (O’; i ' ; j ' ).
4.1. Phép quay
Xét phép quay tâm O góc α. Phép quay này giữ bất biến điểm O tức là
O’(0;0), điểm I(1; 0) biến thành I’(cosα; sinα), điểm J(0; 1) biến thành J’(sinα; cosα).

uuuur

uuuuur

Khi đó ta có : O’(0;0) ; O ' I ' = (cosα; sinα); O ' J ' =(- sinα; cosα).
Áp dụng công thức đổi trục toạ độ ở trên ta có:
 x = x.cos α − y.sin α

 y = x.sin α + y.cos α

- Các trường hợp đặc biệt:

 x = − y
+) Góc α = 90 ta có công thức đổi trục là: 
 y = x
 x = − x
+) Góc α = 1800 ta có công thức đổi trục là: 
 y = − y
0

4.2. Phép tịnh tiến

7


Xét phép tịnh tiến theo vecto (a; b). Phép tịnh tiến này biến điểm O(0;
0) thành điểm O’(a; b), điểm I(1; 0) biến thành điểm I’(a+ 1; b) và điểm J(0;1)
biến thành điểm J’(a; b+1)

uuuur

uuuuur

Khi đó ta có: O’(a; b) ; O ' I ' = (1; 0); O ' J ' = (0;1)
 x = x + a

Áp dụng công thức đổi trục tọa độ ta có 

 y = y + b

5. Biểu diễn các yếu tố trong hình học
5.1 Đường thẳng

Ta thấy trong hình học phẳng, một đường thẳng có nhiều cách biểu
diễn. Nhưng để biểu diễn yếu tố này trên máy tính ta sẽ chọn một số cách biểu
diễn sau:
- Dạng đường thẳng có hệ số góc: phương tình đường thẳng có dạng y
= ax + b. Do đó để biểu diễn đường thẳng này ta chỉ cần quan tâm tới cặp 2
số a và b.
- Dạng phương trình tổng quát ax + by + c = 0. Để biểu diễn dưới dạng
này đường thẳng được đặc trưng bởi bộ 3 hệ số a, b, c trong đó vecto pháp
r

tuyến là n = (a; b).
- Dạng ax + by = c - một dạng của tổng quát đã được biến đổi. Để biểu
r

diễn ở dạng này ta chỉ cần quan tâm tới một vecto pháp tuyến n = (a; b) và
một điểm P(x; y) thuộc đường thẳng. Khi đó ta có thể viết được phương trình
r uuur

đường thẳng bằng cách sau: n.OP = (a; b).(x; y) = ax+by = c.
r

- Dạng tham số: ta chỉ cần quan tâm tới một vecto chỉ phương u
=(a; b) và một điểm P là điểm thuộc đường thẳng.

Việc chuyển đổi từ phương trình dạng tham số sang tổng quát hoặc
ngược lại trong toán học đã biết.
5.2. Đoạn thẳng:
Để biểu diễn đoạn thẳng ta quan tâm tới hai đầu mút của đoạn

8



5.3. Tia:
Để biểu diễn tia Ax, ta quan tâm tới gốc A và 1 vecto chỉ hướng của tia
hoặc có thể biểu diễn bởi gốc A và một điểm B nằm trên tia.
5.4. Đa giác:
Đa giác là một đường gấp khúc khép kín.
Để biểu diễn đa giác trên máy tính ta lưu một dãy các đỉnh liên tiếp
nhau.
B. Một số bài toán cơ bản
1. Cài đặt một số phép toán cơ bản trên vecto
Uses math;
Type
Real = Extended;
Tpoint = record
x, y : real;
End;
Tvecto = Tpoint;
Const

eps : real=1e-3;

----Phép toán tích chéo của hai vecto--Operator

><(const u, v : fload):fload;

Begin
Result:=u.x*v.y – u.y*v.x;
End;
----Kiểm tra hai số thực bằng nhau---Function realEq(const a, b: real):boolean;

Begin
RealEq:=abs(a – b)<=eps;
End;
----Kiểm tra hai điểm trùng nhau ---9


Function EqPoint(const A, B: TPoint):boolean;
Begin
EqPoint:=realEq(A.x,B.x) and realEq(A.y,B.y);
End;
2.Biểu diễn tuyến tính

r r

r

r

r

r

Bài toán 1: Cho ba vecto a , b và c . Tìm cặp số (p; q) để c = p.a + q.b ?
Giải quyết
Giả sử trong hệ tọa độ Oxy, tọa độ của ba vecto lần lượt là
r
r
r
a ( a1 ; a2 ) ; b = ( b1 ; b2 ) ; c = ( c1 ; c2 )


r

r

r

 a1 p + b1q = c1

Khi đó c = p.a + q.b ⇔ a p + b q = c (I)
 2
2
2
Do đó vấn đề cần giải quyết của bài toán trở thành tìm nghiệm của hệ
(I) với ẩn là p và q.
Để giải quyết vấn đề này ta tính ba định thức
D=
Dp =
Dq =

a1 a 2
b1

b2

c1 c 2
b1

b2

a1 a 2

c1

c2

r r
= a×b
r r
= c×b
r r
= a×c

Vì thế sẽ có ba trường hợp sau:
Dp

p
=

D
+) D ≠ 0 : hệ có nghiệm duy nhất  D , đây chính là cặp số (p; q) duy nhất
q = q

D

thỏa mãn yêu cầu bài toán.

r r

+) D = 0 , khi đó hai vecto a , b cùng phương
r


- Dp= Dq = 0 thì hệ vô số nghiệm, khi đó c cùng phương với cả hai vecto
r r
a , b . Khi đó hệ có nghiệm (p; q) =(Nan; Nan)

10


r

- Dp ≠ 0 hoặc Dq ≠ 0 thì hệ vô nghiệm, khi đó c không cùng phương với
r r

hai vecto a , b . Khi đó hệ có nghiệm (p; q) = (Inf; Inf)
Cài đặt
function
var

bdtt(const

a, b, c : tvecto):Tvecto;

d : float;

begin
D:=a>< b;
result:=vector((c><b)/D,(a>end;
3. Tìm giao điểm của hai đường thẳng
Bài toán 2: Trên mặt phẳng với hệ tọa đồ Đề các vuông góc Oxy cho hai
đường thẳng có phương trình tổng quát là (d1): A1x + B1y + C1 = 0 và (d2):

A2x + B2y + C2 = 0.
Hãy xác định giao điểm của hai đường thẳng trên?
Giải quyết
r
r
r
Đặt a = ( A1 ; A2 ) ; b = ( B1 ; B2 ) ; c = ( C1; C2 )
r

Yêu cầu bài toán trở thành tìm cách biểu diễn tuyến tính của vecto c
r

r

r

qua tổ hợp hai vecto, tức là tìm cặp số (x; y) để c = x.a + y.b

Khi đó ta lại áp dụng bài toán 1 để giải quyết và có 3 trường hợp ứng
với 3 khả năng của 2 đường thẳng d1 và d2
4. Tìm giao điểm của hai đoạn thẳng
Bài toán 3: Cho bốn điểm A, B, C, D.. Hãy xác định xem hai đoạn thẳng AB
và CD có cắt nhau không? Nếu có hãy cho biết tọa độ giao điểm của chúng.
Giải quyết
Để giải quyết vấn đề này ta có thể làm như sau:
- Viết phương trình tổng quát của hai đường thẳng AB và CD.
- Tìm giao điểm M của hai đường thẳng.
- Kiểm tra M có nằm trên đoạn AB và CD không.
11



Một cách giải quyết khác có thể hiệu quả hơn là: Nếu hai đoạn thẳng
AB và CD cắt nhau tại M thì sẽ tồn tại duy nhất một cặp số (p; q) thuộc đoạn
uuuur
uuur
 AM = p AB
[0; 1] sao cho:  uuuur uuur (1)
CM = qCD
uuuur uuuur
uuur uuur
uuur
uuur uuur
Từ (1) ⇒ AM − CM = p AB + qDC hay AC = p AB + qDC

uuur

Khi đó, bài toán trở thành : tìm biểu diễn tuyến tính của AC qua hai

uuur

uuur

vecto AB và DC , sau đó kiểm tra cặp số (p; q) ∈[0; 1], nếu thỏa mãn thì tọa độ
uuuur uuur

uuur

điểm M được tìm theo đẳng thức sau: OM = OA + p AB
5. Tìm giao điểm giữa một đoạn thẳng và một tia


Bài toán 4: Cho bốn điểm A, B, C, D. Xác định xem đoạn thẳng AB có cắt tia
CD không? Nếu có hãy cho biết tọa độ giao điểm.
Giải quyết
Nếu đoạn thẳng AB và tia CD cắt nhau tại điểm M thì sẽ tồn tại một cặp

uuuur
uuur
 AM = p AB
số (p; q) duy nhất,với p ∈[0;1] và q∈[0;+∞) sao cho  uuuur uuur
CM = qCD

Ta lại làm gống như bài toán 3, chỉ thay đổi một điểm là kiểm tra q>0 ,
p∈[0;1]
6. Tam giác
- Biểu diễn tam giác: thông thường tam giác được xác định bởi ba đỉnh
tam giác.
- Diện tích tam giác: Ta có thể dùng một số công thức sau:
a.hb
2
ab sin C
+) Tính theo hai cạnh và góc xen giữa: S =
2

+) Tính theo đường cao và cạnh đáy: S =

+) Tính theo ba cạnh (công thức Herong):
S = p ( p − a ) ( p − b ) ( p − c ) , với p là nửa chu vi.
uuur uuur
AB × AC
+) Tính theo tích chéo: S =

(7a)
2

12


+)Với tọa độ ba đỉnh A(xA; yA); B(xB; yB); C(xC; yC) thì công thức (7a)
có thể viết theo tọa độ S =

( xB − xA ) ( yC − y A ) − ( xC − xA ) ( yB − y A )
2

(7b)

7.Đa giác
7.1. Diện tích đa giác
Bài toán 5:

Trên mặt phẳng với hệ tọa độ Đêcác vuông góc, cho đa giác

P= P1P2…Pn , trong đó các điểm Pi có tọa độ tương ứng là (xi; yi). Tính diện
tích đa giác P?
Giải quyết
* Ta bổ sung thêm điểm P0 ≡ Pn và điểm Pn+1 ≡ P1.
Khi diện tích đa giác P được tính bằng công thức
S=

1
2


uuur uuuuur 1
OP

i × OPi +1 =
2
i =1
n

n

∑( x

i −1

i =1

− xi +1 ) yi

Ta chứng minh công thức trên với hình vẽ minh họa một đa giác có bốn đỉnh
P1, P2, P3, P4.
P4

P2

P3

P1
O

Dựa vào hình vẽ ta thấy S = −S∆OP P − S ∆OP P + S∆OP P + S∆OP P

1 2

2 3

3 4

4 1

Mà theo phần trên (diện tích tam giác) ta thấy
uuur

uuur

+) Quay vecto OP1 tới vecto OP2 là hướng thuận nên theo công thức (7a) thì
S ∆OP1P2 mang dấu âm

+) Tương tự như vậy S∆OP P mang dấu âm con S∆OP P và S∆OP P mang dấu
2 3

3 4

4 1

dương.
Khi đó, ta thấy diện tích đa giác là
uuur uuuuur 1  n uuur uuuuur 
1 uuur uuur uuur uuur
OP
×
OP

+
OP
×
OP
+
...
+
OP
S=
∑ OPi × OPi+1 ÷ (8a)
1
2
2
3
n × OPn +1 =
2
2  i −1

(

)

13


- Khi các đỉnh của đa giác được đánh theo chiều kim đồng hồ thì bằng lập
luận tương tự ta cũng có công thức tính diện tích đa giác là:
1  n uuur uuuuur 
S = −  ∑ OPi × OPi +1 ÷ (8b)
2  i −1



Tóm lại, tổng quát trong trường hợp các đỉnh của đa giác được đánh theo
chiều thuận hay nghịch thì ta đều có thể tính diện tích đa giác P bằng công
thức sau: S =

1
2

n

uuur uuuuur

∑ OP × OP
i −1

i

i +1

(8c)

* Ta sẽ chứng minh công thức tính diện tích đa giác theo tọa độ các đỉnh.
uuur

Vì điểm Pi có tọa độ tương ứng là (x i; yi) nên các vecto OPi có tọa độ tương
ứng là (xi ; yi), dựa vào công thức tích chéo, ta có
S=

1

2

n

∑( x y
i =1

i

i +1

− xi +1 yi )

1
( x1 y2 − x2 y1 + x2 y3 − x3 y 2 + x3 y4 − x4 y 3 + ... + xn y1 − x1 yn )
2
1
= ( xn y1 − x2 y1 + x1 y2 − x3 y 2 + ... + xn −1 yn − x1 yn )
2
1 n
= ∑ ( xi −1 − xi +1 ) yi (8d)
2 i =1
=

7.2. Kiểm tra điểm nằm trong đa giác
Bài toán 6: Trên mặt phẳng với hệ tọa độ Đêcác vuông góc, cho đa giác
P= P1P2…Pn và một điểm A. hãy cho biết điểm A có nằm trong đa giác hay
không?
Giải quyết
- Nếu điểm A thuộc một cạnh của đa giác thì kết luận A nằm trong đa giác.

- Nếu không thì:
+) Từ A xác định một tia gốc A không đi qua đỉnh nào của đa giác, ta gọi
tia này là tia AB. Có nhiều cách chọn tia này, ví dụ như chọn ngẫu nhiên n+1
tia đôi một khác nhau, khi đó chắc chắn sẽ có một tia không đi qua đỉnh nào
của đa giác. Tuy nhiên, trên thực tế, phương pháp hiệu quả hơn được áp dụng

14


là: sinh ngẫu nhiên một tia, nếu tia đó đi qua một đỉnh của đa giác thì sinh
ngẫu nhiên một tia khác và thử lại.
+) Nếu tia AB cắt cạnh đa giác một số lẻ lần thì điểm A nằm trong đa giác,
ngược lại thì điểm A nằm ngoài đa giác.
C. Bài tập
Bài 1: Triangle and point
Cho tam giác ABC và 1 điểm M không nằm trên cạnh của tam giác.
Yêu cầu: Hãy viết chương trình tính số lớn nhất R sao cho vòng tròn tâm M,
bán kính R không cắt bất cứ cạnh nào và không chứa tam giác ABC.
Input: Ghi trong file TRIANGLE.INP
- Dòng đầu tiên ghi 6 số thực là toạ độ ba đỉnh của tam giác Ax Ay Bx
By Cx Cy
- Dòng thứ hai ghi toạ độ điểm M : Mx

My

Các số thực được viết với 1 chữ số thập phân, cách nhau bởi 1 dấu cách
Output: ghi ra file TRIANGLE.OUT gồm 1 số duy nhất R làm tròn đến 1
chữ số sau dấu phảy.
Ví dụ
TRIANGLE.OUT


TRIANGLE.INP
0.2 1.1 0.0 0.3 2.0 0.0
4.0 0.0

2.0

Thuật toán
Kiểm tra xem điểm M nằm ở đâu
+) Điểm M nằm trong tam giác thì R = min(d(M, AB), d(M, AC), d(M, BC))
+) Nếu điểm M nằm ngoài tam giác thì có khả năng sau

15


A

Ví dụ điểm M nằm ngoài về phía đối
diện với điểm A bị chia cắt bởi đường
thẳng BC

B

C

M2

M1

- Ở vị trí M1 bị giới hạn bởi cạnh AB

M3

kéo dài và tia vuông góc với BC tại B:
thì R = M1B

- Ở vị trí M2 bị giới hạn bởi hai tia tia thứ nhất vuông góc với BC tại B và tia
thứ hai vuông góc với BC tại C: thì R = d(M2, BC)
- Ở vị trí M3 bị giới hạn bởi cạnh AC kéo dài và tia vuông góc với BC tại C:
thì R = M3C
Tương tự như vậy với hai trường hợp còn lại.
Cài đặt
Uses

math;

const

finp='triangle.inp';
fout='triangle.out';

var

fi,fo:text;
n,i,test:longint;
xa,ya,xb,yb,xc,yc,xm,ym,r:extended;

function kc(x1,y1,x2,y2:extended):extended;
begin
exit(sqrt(sqr(x2-x1)+sqr(y2-y1)));
end;

function ccw(x1,y1,x2,y2,x3,y3:extended):extended;
var

a1,b1,a2,b2:extended;

begin
16


a1:=x2-x1;
b1:=y2-y1;
a2:=x3-x2;
b2:=y3-y2;
exit(a1*b2-a2*b1);
end;
function kt:boolean;
var

a,b,c:extended;

begin
a:=ccw(xa,ya,xb,yb,xm,ym);
b:=ccw(xb,yb,xc,yc,xm,ym);
c:=ccw(xc,yc,xa,ya,xm,ym);
if ((a>0)and(b>0)and(c>0))or((a<0)
and(b<0)and(c<0))then exit(true)
else exit(false);
end;
function tinh(x1,y1,x2,y2:extended):extended;
var


a1,a2,b1,b2,c1,c2,x3,y3,a,b,c:extended;

begin
a1:=x2-x1;b1:=y2-y1;c1:=a1*xm+b1*ym;
a2:=b1;b2:=-a1;c2:=a2*x1+b2*y1;
y3:=(c1*a2-c2*a1)/(b1*a2-b2*a1);
x3:=(c1-b1*y3)/a1;
a:=kc(x3,y3,xm,ym);
b:=kc(x1,y1,xm,ym);
c:=kc(x2,y2,xm,ym);
17


if kc(x1,y1,x3,y3)+kc(x2,y2,x3,y3)kc(x1,y1,x2,y2)<=0.000000001 then exit(a)
else exit(min(b,c));
end;
procedure lam;
var

a,b,c:extended;

begin
if kt then
begin
a:=tinh(xa,ya,xb,yb);
b:=tinh(xb,yb,xc,yc);
c:=tinh(xa,ya,xc,yc);
r:=min(a,min(b,c));
end

else
begin
a:=tinh(xa,ya,xb,yb);
b:=tinh(xb,yb,xc,yc);
c:=tinh(xa,ya,xc,yc);
r:=min(a,min(b,c));
end;
write(fo,r:0:1);
end;
begin
assign(fi,finp);reset(fi);
assign(fo,fout);rewrite(fo);
readln(fi,xa,ya,xb,yb,xc,yc);
18


readln(fi,xm,ym);
lam;
close(fi);close(fo);
end.
Bài 2: Vườn cây (đề thi chọn học sinh giỏi khu vực duyên hải và đồng bằng
bắc bộ năm học 2013-2014)
Bờm vừa thằng cược Phú Ông và phần thưởng là lấy tất cả các cây gỗ
sưa trong vườn của Phú Ông. Thấy Phú Ông thẫn thờ vì mất cây, Bờm liền
đưa cho Phú Ông một sợi dây và nói: “Ông hãy chọn một số cây, những cây
còn lại tôi sẽ lấy đi, chú ý rằng, sau khi tôi lấy đi thì những cây còn lại phải
bao được bằng sợi dây này”. Phú Ông đồng ý ngay và tìm cách chọn cây sao
cho giữ lại được nhiều cây nhất. Giả sử vườn cây của Phú Ông có n cây và coi
mỗi cây như một hình tròn trên mặt phẳng, các cây có cung bán kính r, cây
thứ i có tọa độ tâm (xi, yi).


Khu vườn của Phú Ông
Yêu cầu: Cho d là độ dài sợi dây và tọa độ tâm của n cây, các cây có bán
kính r. Hãy giúp Phú Ông tìm cách chọn để giữ lại nhiều cây nhất.
Dữ liệu: Vào từ thiết bị vào chuẩn: Dòng đầu tiên ghi số nguyên dương K là
số lượng bộ dữ liệu. Tiếp đến là K nhóm dòng, mỗi nhóm tương ứng với một
bộ dữ liệu có cấu trúc như sau:
- Dòng thứ nhất ghi ba số nguyên dương d, n và r (d ≤ 109 ; r ≤ 100)
- n dòng tiếp theo, dòng thứ i chứa hai số nguyên xi, yi (|xi|, |yi| ≤ 1000).
19


Dữ liệu đảm bảo các hình tròn không giao nhau. Các số trên cùng một dòng
được ghi cách nhau ít nhất một dấu cách.
Kết quả: Ghi ra thiết bị ra chuẩn gồm K dòng, mỗi dòng ghi một số nguyên là
số lượng cây mà Phú Ông có thể giữ lại được ứng với bộ dữ liệu trong file dữ
liệu vào.
Sub 1: n <=2
Sub 2: n <=3
Sub 3: n<=4
Sub 4: n<=10
Ví dụ

Thuật toán
- Duyệt nhị phân các khả năng mà Phú Ông có thể giữ lại số lượng cây (giả
sử là k) từ n giảm dần về 1.
- Với mỗi phương án ta tìm bao lồi bao quanh tâm của k cây và kiểm tra
xem tổng độ dài của bao lồi cộng thêm chu vi đường tròn của 1 cây = d:
thoả mãn ta tìm được phương án cần tìm -> kết thúc.
Cài đặt

const

type

MAX

= 10;

fi

= '';

fo

= '';

eps

= 1e-9;

Point

= record
x, y: extended;
20


end;
var


tree, p

:array[1..MAX]of Point;

d

:array[1..MAX]of longint;

nTree, nTest, n :longint;
r,L

:extended;

best

:longint;

f, g

:text;

function Dist(p1, p2: Point): extended;
begin
Dist := Sqrt(Sqr(p1.x - p2.x) + Sqr(p1.y - p2.y));
end;
procedure Extract(p1,p2: Point;var a,b,c: extended);
begin
a := p1.y - p2.y;
b := p2.x - p1.x;
with p1 do c := -(a*x + b*y);

end;
function check(p1,p2: Point):boolean;
var a, b, c, t1, t2 :extended;
i

:longint;

begin
Extract(p1, p2, a, b, c);
for i:=1 to n do
begin
t1:=p[i].x * a + p[i].y * b + c;
if abs(t1) > eps then break;
end;
for i:=1 to n do
21


begin
t2:=p[i].x * a + p[i].y * b + c;
if t1 * t2 < -eps then exit(false);
end;
for i:=1 to n do
begin
t1:=p[i].x * a + p[i].y * b + c;
if abs(t1) < eps then begin
if (Dist(p[i], p1) > eps) and (Dist(p[i],
p2) > eps) then begin
if Dist(p[i], p1) + Dist(p1, p2) Dist(p[i], p2) < eps then exit(false);
if Dist(p[i], p2) + Dist(p1, p2) Dist(p[i], p1) < eps then exit(false);

end;
end;
end;
exit(true);
end;
procedure sol;
var i,j,k :longint;
sum

:extended;

begin
n:=0;
for k:=1 to nTree do
if d[k] = 1 then begin
inc(n);
22


p[n]:=tree[k];
end;
k:=0;
sum:=0;
for i:=1 to n do
for j:=i+1 to n do
if check(p[i],p[j]) then begin
inc(k);
sum:=sum + Dist(p[i],p[j]);
end;
if k = 1 then sum:=sum * 2;

sum:=sum + 2*pi*r;
if (sum < L + eps) and (n > best) then best:=n;
end;
procedure readFile;
var i :longint;
begin
read(f,L,nTree,r);
for

i:=1

to

nTree

tree[i].y);
end;
procedure bk(i:longint);
var j

:longint;

begin
if i > nTree then sol
else for j:=0 to 1 do begin
d[i]:=j;
bk(i+1);
23

do


read(f,tree[i].x,


end;
end;
BEGIN
assign(f,fi); reset(f);
assign(g,fo); rewrite(g);
readln(f,nTest);
while nTest > 0 do begin
dec(nTest);
readFile;
best:=0;
bk(1);
writeln(g,best);
end;
close(f);
close(g);
END.
III. HIỆU QUẢ DO SÁNG KIẾN ĐEM LẠI
1. Hiệu quả kinh tế
2. Hiệu quả về mặt xã hội
Sau khi dạy cho học sinh khối chuyên tin về phương pháp ứng dụng
vecto vào giải quyết một số bài toán hinh học trong tin học, tôi thấy các em đã
có nhiều chuyển biến về phương pháp giải các bài toán về hình học trong tin
học. Đặc biệt là các em đã có sự thay đổi nhiều về cách thiết kế thuật toán cho
các bài toán hình học đặc biệt là đã biết dùng tìm cách giải tốt trong toán học
để thiết kế thuật toán và cài đặt chương trình để có hiệu quả cao. Chính vì vậy,
trong các kỳ thi học sinh giỏi tỉnh, vùng duyên hải đồng bằng Bắc Bộ, Quốc

gia… các em đã đạt kết quả rất tốt.

24


Kết quả :
Trong năm học 2013 – 2014, kỳ thi học sinh giỏi vùng duyên hải đồng
bằng Bắc Bộ, khối 11 đạt 1 Huy chương Vàng, 1 Huy chương Bạc, 1 Huy
chương Đồng. Kỳ thi học sinh giỏi Quốc Gia các em đạt 1 giải Nhì, 4 giải Ba,
2 giải Khuyến Khích và có 1 học sinh được lọt vào vòng 2 chọn đội tuyển thi
Quốc tế..
Trong năm học 2014 – 2015, kỳ thi học sinh giỏi vùng duyên hải đồng
bằng Bắc Bộ, khối 11 đạt 1 Huy chương Vàng, 1 Huy chương Bạc, 1 Huy
chương Đồng. Kỳ thi học sinh giỏi Quốc Gia các em đạt 2 giải Nhì, 3 giải Ba,
1 giải Khuyến Khích và có 2 học sinh được lọt vào vòng 2 chọn đội tuyển thi
Quốc tế.
IV. CAM KẾT KHÔNG SAO CHÉP HOẶC VI PHẠM BẢN QUYỀN
Tôi cam kết không sao chép hoặc vi phạm bản quyền của tác giả khác.
CƠ QUAN ĐƠN VỊ

TÁC GIẢ SÁNG KIẾN

ÁP DỤNG SANG KIẾN

(Ký tên)

(xác nhận)

25



×