Tải bản đầy đủ (.pdf) (28 trang)

Bài toán tiếp tuyến của đường tròn

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 (381.66 KB, 28 trang )

Bài toán tiếp tuyến của đường tròn
==========================================================

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA TOÁN TIN ỨNG DỤNG
----- -----

TIỂU LUẬN
Đề tài: Bài toán tiếp tuyến đường tròn
Giáo viên hướng dẫn: Nguyễn Hữu Điển
Sinh viên thực hiện

: Đỗ Phương Liên, Nguyễn Thị Cúc

Lớp: toán 2-k51. ĐHBKHN

Hà Nội, tháng 11 năm 2009

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

1


Bài toán tiếp tuyến của đường tròn
==========================================================

PHẦN I: GIỚI THIỆU
1. Giới thiệu chung về Maple:



Maple là một gói phần mềm toán học thương mại phục vụ cho nhiều mục
đích. Nó phát triển lần đầu tiên vào năm 1980 bởi Nhóm Tính toán Hình
thức tại Đại học Waterloo ở Waterloo, Ontario, Canada
Từ năm 1988, nó đã được phát triển và thương mại hóa bởi Waterloo
Maple Inc. (còn được biết đến với tên gọi Maplesoft), một công ty
Canada cũng có trụ sở tại Waterloo, Ontario. Phiên bản hiện tại là Maple
13 được phát hành vào tháng 5 năm 2009. Đối thủ cạnh tranh chính của
nó là Mathematica.
Chức năng cốt lõi
Người dùng có thể nhập biểu thức toán học theo các ký hiệu toán học
truyền thống. Có thể dễ dàng tạo ra những giao diện người dùng tùy chọn.
Maple hỗ trợ cho cả tính toán số và tính toán hình thức, cũng như hiển
thị. Nhiều phép tính số học được thực hiện dựa trên thư viện số học
NAG; trong Maple, các chương trình con NAG đã được mở rộng để cho
phép độ chính xác ngẫu nhiên lớn. Các ví dụ về tính toán hình thức sẽ
được trình bày trong phần sau.
Maple cũng có một ngôn ngữ lập trình cấp cao đầy đủ. Cũng có giao diện
cho những ngôn ngữ khác (C, Fortran, Java, MatLap, Visual Basic). Cũng
có một giao diện dành cho Excel.
Với phần mềm Maple, chúng ta có thể:
+ Thực hiện các tính toán với khối lượng lớn, với thời gian nhanh và độ
chính xác cao.

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

2



Bài toán tiếp tuyến của đường tròn
==========================================================

+ Sử dụng các gói chuyên dụng của Maple để giải quyết các bài toán cụ
thể như: vẽ đồ thị ( gói plot), hình học giải tích ( gói geometry), đại số
tuyến tính ( gói linalg),..
+ Thiết kế các đối tượng 3 chiều.
+…
Kiến trúc
Phần lớn chức năng toán học của Maple được viết bằng ngôn ngữ Maple,
và được thông dịch bởi nhân Maple. Nhân Maple được viết bằng C.
Maple chạy trên tất cả các hệ điều hành chính.
Ngôn ngữ lập trình Maple là một ngôn ngữ kiến động. Cũng giống như
các hệ thống đại số máy tính, các biểu thức hình thức được lưu trữ trong
bộ nhớ theo đồ thị không chu trình có hướng (DAG). Ngôn ngữ cho phép
các biến có phạm vi nhất định (lexical scoping). Ngôn ngữ có hình thức
lập trình hàm, nhưng cũng có hỗ trợ đầy đủ cho lập trình truyền thống,
theo kiểu mệnh lệnh.
Một điều lạ đối với chương trình thương mại, đa số mã nguồn đều có thể
xem tự do.
Nguồn gốc tên gọi
Tên "Maple" không phải là tên viết tắt hoặc từ cấu tạo bằng chữ đầu, mà
chỉ đơn giản là để chỉ hình tượng Lá phong (tiếng Anh: maple) trên Quốc
kỳ Canada.
2. Giới thiệu một số gói lệnh trong Maple:
2.1 Gói plots:

Gói plots chứa các lệnh cho phép vẽ hình trong không gian 2 và 3 chiều,

Gói plottools công cụ chứa các lệnh cho phép làm việc với các đối tượng
hình ảnh:
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

3


Bài toán tiếp tuyến của đường tròn
==========================================================

a. Sự vận động của đồ thị:
animate3d(ham_co_tham_so,x=gt_dau..gt_cuoi, y=gt_dau..gt_cuoi,
tham_so =gt_dau..gt_cuoi);
Ý nghĩa: hiển thị sự biến đổi, vận động của đồ thị khi tham số thay đổi
trong khoảng cho trước
b.Lệnh plots[display]()
Cú pháp:
plots[display](a,b,c...,insequence=true(false),options);
plots[display](L,insequence=true(false),options);
plots[display](A,options);
plots[display](P,options);
Các tham số:
a,b,c... là cá đồ thị riêng biệt.
L: dãy (list) các đồ thị(ví dụ L:=a,b,c;)
A: mảng một chiều hoặc hai chiều của các đồ thị.
P: đồ thị dưới dạng vận động.
insequence=true(false): nó cho phép hiện từng đồ thị trong dãy(list) theo

trình tự của dãy.
options: các tính chất cơ bản của các lệnh vẽ như plot/options
2.2 Gói plottools
Trình tự cú pháp:
plottools[các tùy chọn](các đối số)
lệnh(các đối số)
Vì các lệnh vẽ đồ thị hàm số y=f(x) nằm trong gói (package)
plottools và thao tác vẽ đồ thị hàm số tốn nhiều bộ nhớ nên trước hết ta
phải:
> restart ;
‘khởi động lại và xóa sạch bộ nhớ
> with(plots)
‘nạp gói plots
> with(plottools) ;
‘nạp gói plottools
Chú ý:Các lệnh vẽ trong gói PLOTTOOLS phải được biểu diễn
bằng cách dùng lệnh display trong gói PLOTS.Vì vậy phải nạp gói
PLOTS cùng với gói PLOTTOOLS.
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

4


Bài toán tiếp tuyến của đường tròn
==========================================================

Phần mô tả:

● Gói plottools chứa các thường trình (một đoạn mã chương trình) có
thể tự động tạo ra một cách có trình tự các đối tượng giao diện đồ họa
dùng trong các cấu trúc vẽ hình. Kết quả của tùy chọn plottools thường là
đối tượng vẽ hình- phải được biểu diễn bằng cách dùng lệnh
plots[display] .
● Mỗi lệnh trong gói plottools thể được truy xuất bằng cách dùng long
form hoặc sort form của tên lệnh trong trình tự gọi lệnh.
Danh sách các tùy chọn của gói plottools
● Các tùy chọn tạo ra các cấu trúc vẽ hình là: Maple có rất nhiều tùy
chọn : vẽ hình tròn,
arc
arrow
circle
conecuboid
curve
cutin
cutout
cylinder
disk
dodecahedron
ellipticArc
hemisphere
hexahedron
hyperbola
ellipse
icosahedron line
octahedron
parallelepiped
pieslice
point

polygon
rectangle
semitorus
sphere
tetrahedron
torus
● Các tùy chọn sửa đổi các cấu trúc vẽ hình là:
homothety
stellate

project
transform

reflect
translate

rotate

scale

a.Lệnh plottools[stellate] chỉ có thể dùng với cấu trúc POLYGON(hình
đa diện).
b. Lệnh plottools[rotate](): quay đồ thị 2D, 3D:
Cú pháp:
plottools[rotate](p,ang,pt_2d); quay một góc ang quanh điểm có tọa độ
pt_2d.
plottools[rotate](q,alpha,beta,gamma); quay đồ thị q quanh truc x, y, z với
các góc tương ứng.
plottools[rotate](q,alpha,[pt_3d1,pt_3d2]); quay đồ thị q quanh trục qua
[pt_3d1,pt_3d2]

Các tham số:
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

5


Bài toán tiếp tuyến của đường tròn
==========================================================

p: cấu trúc đồ thị 2D.
q: cấu trúc đồ thị 3D.
ang: góc quay.
pt_2d: tọa độ điểm làm gốc.
alpha,beta,gamma:gốc quay quanh trục x,y,z.
[pt_3d1,pt_3d2]:
c.Lệnh plottools[scale](): co giãn đồ thị
Cú pháp:
plottools[scale](p,a,b,pt_2d);
plottools[scale](p,a,b,c,pt_3d);
Các tham số:
a,b,c: là hệ số co giãn theo các trục x,y,z.
pt_2d,pt_3d: tâm co giãn.
d.Lệnh plottools[translate](p,a,b): Lệnh tịnh tiến đồ thị.
Lệnh này tác động lệnh đồ thị p cho kết quả là tịnh tiến đồ thị này đến tọa
độ mới (a,b)
Cú pháp:
plottools[translate](p,a,b); "dịch chuyển tịnh tiến trong 2D"

plottools[translate](q,a,b,c); "dịch chuyển tịnh tiến trong 3D"
Các tham số:
p,q: cấu trúc đồ thị cần dịch chuyển tịnh tiến.
a,b,c là các số thực (chính là tọa mới)
Ví dụ:
Vẽ cung tròn: arc():
+Cấu trúc tổng quát : arc(c, r, a..b, options)
Trong đó: c - tâm đường tròn.
r - bán kính đường tròn.
a - góc bắt đầu (tính bằng radian).
b - góc kết thúc (tính bằng radian).
Options – Các tùy chọn .
+ Mô tả :
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

6


Bài toán tiếp tuyến của đường tròn
==========================================================

. Tùy chọn arc tạo ra một cung tròn của một hình tròn với
tâm c và bán kính r. Góc đầu và góc kết thúc của cung tròn theo lý thuyết
là một miền từ a..b, theo đúng thứ tự.
. Đối tượng dữ liệu vẽ hình do lệnh arc thể được dùng trong
một cấu trúc dữ liệu PLOT, hoặc dược biểu diễn bằng cách dùng tùy
chọn plots[display] .

. options: các tùy chọn.
Vẽ đường tròn: circle():
+Cấu trúc tổng quát: c1:=circle(c,r,option)
Trong đó : c -tâm đường tròn.
r -(tùy chọn) bán kính đường tròn, mặc định=1.0.
option –(tùy chọn) các tùy chọn.
+Mô tả:
. Tạo ra một đường tròn hai chiều với tâm c, bán kính r.
.Có thể được dùng trong cấu trúc dữ liệu PLOT, hoặc dùng
gói plots[display] biểu diễn.
3.Giới thiệu về đề tài hình học giải tích:
Ở cấp trung học, hình học giải tích đòi hỏi học sinh 1 trí tưởng tượng
và óc nhạy bén để “đoán ra” lời giải trước khi tìm cách chứng minh.
Điều này chỉ có thể làm được nếu đó là những bài toán đơn giản. Trên đại
học, hình học giải tích đưa ra tất cả các phương trình trước khi ly luận.
Việc này hệ thống hóa vấn đề đồng thời cho phép giải quyết những bài
toán cực kỳ phức tạp mà không cần phải tưởng tượng như trước. Ví dụ
như bài toán quỹ tích. Hình học giải tích giúp ta tìm ra tọa độ của điểm
muốn tìm. Một khi biết được tọa độ, xác định và vẽ quỹ tích rất đơn giản:
Đường biểu diễn tham số.
Maple là 1 công cụ hầu như ly tưởng để giải các vấn đề trên. Mặt khác,
nếu nắm vững các nguyên tắc tạo hình động, các bài toán quỹ tích sẽ đêm
đến cho chúng ta rất nhiều ly thú qua khía cạnh sinh động của lời giải.

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

7



Bài toán tiếp tuyến của đường tròn
==========================================================

PHẦN II: ỨNG DỤNG CHO BÀI TOÁN
TIẾP TUYẾN CỦA ĐƯỜNG TRÒN
1. Bài toán tìm đường thẳng đi qua 1 điểm cho trước và là tiếp tuyến
của đường tròn cho trước:
Trong hệ trục tọa độ Oxy, cho đường tròn (C1) tâm I( xI , yI ) bán kính r,
điểm A( xA , y A ). Viết phương trình tiếp tuyến của(C1) biết tiếp tuyến đó đi
qua A.
Đầu vào: - xI , yI tọa độ tâm I.
- xA , y A tọa độ điểm A.
-r : bán kính (C1).
Đầu ra: -Phương trình tiếp tuyến của(C1) thỏa mãn tiếp tuyến đó đi qua A
-Vẽ hình (C1) và các tiếp tuyến tìm được.
Thuật toán:
Phương trình (C1): ( x − xI ) 2 + ( y − yI ) 2 = r 2 (1)
- Nếu A nằm phía trong (C1) (tức AI < r) thì không có tiếp tuyến nào của
(C1) thỏa mãn đi qua A.
-Nếu A nằm trên đường tròn (C1) tức tọa độ của A thỏa mãn phương
trình (1) thì có duy nhất 1 đường thẳng d thỏa mãn yêu cầu bài toán.
(d) đi qua A( xA , y A ) và nhận vecto IA làm vecto pháp tuyến, suy ra
phương trình (d) có dạng:
( x A − xI )( x − x A ) + ( y A − yI )( y − y A ) = 0

-Ngược lại gọi (d) là đường thẳng cần tìm.
+Gọi k là hệ số góc của (d). (d) đi qua A và có hệ số góc là k, suy ra
y = k ( x − xA ) + y A

phương trình của (d) có dạng:
+(d) là tiếp tuyến của (C1) khi và chỉ khi khoảng cách từ I đến (d) bằng r.
Hay k phải thỏa mãn phương trình :
k ( xI − x A ) + y A − y I
12 + k 2

= r (2)

Giải phương trình (2) ta thu được nghiệm k.
Trường hợp 1: xA − xI =r thì phương trình (2) có 1 nghiệm duy nhất là k1.
Khi đó 2 tiếp tuyến cần tìm là:
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

8


Bài toán tiếp tuyến của đường tròn
==========================================================

(d1)

x = xA

(d2)

y = k1( x − x A ) + y A


Trường hợp2: xA − xI <> r thì phương trình(2)có 2 nghiệm phân biệtk1,k2
Khi đó 2 tiếp tuyến cần tìm là:
y = k1( x − x A ) + y A
(d1)
(d2)

y = k 2( x − x A ) + y A

CODE
>restart: with(geometry): with(plottools): with(plots,
textplot):
tieptuyen:=proc(xI,yI,r,xA,yA)
local C1,A,I,t1,t2,k1,k2,f1,f2,f,vk,a,g;
a:=2;
C1:=circle([xI,yI],r,color=blue):
A:=textplot([xA+0.1,yA+0.1,"A"],align=ABOVE):
I:=textplot([xI+0.1,yI+0.1,"I"],align=ABOVE):
g:=point([xI,yI],color=red),point([xA,yA],color=red);
if(((xI-xA)^2+(yI-yA)^2) < (r^2)) then
print(" Duong tron C1 khong co tiep tuyen nao di qua
A");
plots[display](C1,A,I,g,scaling=constrained);
elif(((xI-xA)^2+(yI-yA)^2) = (r^2)) then
print(" Tiep tuyen cua C1 di qua A la:"):
if(yI=yA) then
t1:=line([xA,yI-r], [xA,yI+r], color=red,
linestyle=5):
printf("\nx = %3.2f", xA);
else
t1:=plot(yA-(xI-xA)*(x-xA)/(yI-yA),x=-a..a,

linestyle=[DASH], color=(red)):
f:=simplify(yA-(xI-xA)*(x-xA)/(yI-yA));
printf("\ny = %a",f);
fi;
plots[display](C1,A,I,t1,g,scaling=constrained);
else
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

9


Bài toán tiếp tuyến của đường tròn
==========================================================
print(" Tiep tuyen cua C1 di qua A la:"):
f:=((k*(xI-xA)+yA-yI)^2=r*(1+k^2));
if(abs(xI-xA)=r) then
k1:= fsolve(f,k):
f1:=simplify(k1*(x-xA)+yA);
t1:=plot(k1*x-(k1*xA-yA),x=-a..a,linestyle=[DASH],
color=(red)):
t2:=line([xA,yI-r], [xA,yI+r], color=red,
linestyle=5):
printf("\nx = %3.2f", xA);
printf("\ny = %a",f1);
else
vk:= fsolve(f,k):
k1:= vk[1];

k2:= vk[2];
f1:=simplify(k1*(x-xA)+yA);
f2:=simplify(k2*(x-xA)+yA);
t1:=plot(k1*x-(k1*xA-yA),x=-a..a, linestyle=[DASH],
color=(red)):
t2:=plot(k2*x-(k2*xA-yA),x=-a..a,linestyle=[DASH],
color=(red)):
printf("\ny = %a",f1);
printf("\ny = %a",f2);
fi;
plots[display](C1,A,I,t1,t2,g,scaling=constrained);
fi;
end:

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

10


Bài toán tiếp tuyến của đường tròn
==========================================================

Ví dụ:
> tieptuyen(0,0,1,0,-1);
" Tiep tuyen cua C1 di qua A la:"

y = -1


> tieptuyen(0,0,2,1,1);
" Duong tron C1 khong co tiep tuyen nao di qua A"

> tieptuyen(1,0,1,2,3);
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

11


Bài toán tiếp tuyến của đường tròn
==========================================================
" Tiep tuyen cua C1 di qua A la:"

x = 2.00
y = 1.333333333*x+.3333333340

> tieptuyen(0.5,1,1,3,3.5);
" Tiep tuyen cua C1 di qua A la:"

y = .5445400016*x+1.866379995
y = 1.836412379*x-2.009237137

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN


12


Bài toán tiếp tuyến của đường tròn
==========================================================

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

13


Bài toán tiếp tuyến của đường tròn
==========================================================

2.Bài toán tìm tiếp tuyến chung của hai đường tròn:
Cho đường tròn (C1) tâm A(0,0) bán kính a và đường tròn (C2) tâm
B(e,0) bán kính b. Tìm tiếp tuyến chung của (C1) và (C2).
-Đầu vào : a: bán kính đường tròn (C1) tâm A(0,0)
e: hoành độ tâm B của đường tròn (C2)
b: bán kính đường tròn C2 tâm B(e,0)
-Đầu ra: phương trình tiếp tuyến chung của (C1) và (C2), vẽ hình.
Chú thích :
-Tiếp tuyến chéo: là tiếp tuyến chung của 2 đường tròn mà làm cho
tâm 2 đường tròn nằm khác phía với nhau qua tiếp tuyến đó. Ví dụ:

Hai đường tròn chỉ có chung tiếp tuyến chéo khi chúng rời nhau hoàn

toàn.
-Tiếp tuyến ngoài: là tiếp tuyến làm cho tâm 2 đường tròn nằm cùng
phía với nhau qua tiếp tuyến đó. Ví dụ:

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

14


Bài toán tiếp tuyến của đường tròn
==========================================================

-Hai đường tròn bất kỳ đều có chung tiếp tuyến ngoài trừ khi chúng
chứa nhau ( không có tiếp tuyến chung).
Thuật toán:
a/ Bài toán tìm tiếp tuyến chéo:
- Nếu (C1) và (C2) nằm trong nhau, tức (a-b)>e hoặc (b-a)>e thì 2
đường tròn này không có tiếp tuyến chung. Suy ra không có tiếp tuyến
chéo.
- Nếu (C1) và (C2) rời nhau hoàn toàn thì (C1) và (C2) có 2 tiếp
tuyến chéo. Giả sử X(x,0) là giao điểm của tiếp tuyến và trục Ox ta có
:
x


x

a
=
e− x b

+ Biến đổi x theo a,b,e được :
x=

Đặt

ae
a+b

u ( a , b, e ) = x =

ae
a+b

+ Gọi (P) là tiếp tuyến chéo của (C1) và (C2). Phương trình (P) có
dạng :
y = k.x-k.u(a,b,e)

+ Khoảng cách từ A(0,0) đến (P) là :
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

15



Bài toán tiếp tuyến của đường tròn
==========================================================
kae
a+b
k 2 +1

=a

+ Giải phương trình trên với điều kiện k>0 được
a

k=

ae
−a +
b+a

2

2

+ Thay k vào phương trình (P) được 1 phương trình tiếp tuyến cần
tìm.
+ Tiếp tuyến thứ 2 đối xứng với (P) qua Ox và có phương trình là
y = -kx+ku(a,b,e)
CODE:
>restart: with(geometry): with(plottools):
tieptuyencheo:=proc(a,b,e)
local f,k,u1,vk1,k1,t1,C1,C2,L1,L2;
C1:=circle([0,0],a,color=blue):

C2:=circle([e,0],b,color=blue):
if((a+b)u1:=a*e/(a+b):
print("phuong trinh tiep tuyen cheo chung la:");
if(u1>0)then
f:=(k*u1/sqrt(1+k^2)=a);
vk1:= fsolve(%,k):
k1:=simplify(op(select(i->sign(i)>0,[%]))):
t1:=simplify(k1*x-k1*u1);
printf("y = %a, \ny = %a",t1,-t1);
L1:=plot(k1*x-k1*u1,x=(-a)..(e+b),linestyle=[DASH],
color=(red)):
L2:=plot(-k1*x+k1*u1,x=(-a)..(e+b),linestyle=[DASH],
color=(red)):
elif(u1<0) then
f:=(k*u1/sqrt(1+k^2)=-a);
vk1:= fsolve(%,k):
k1:=simplify(op(select(i->sign(i)>0,[%]))):
t1:=simplify(k1*x-k1*u1);
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

16


Bài toán tiếp tuyến của đường tròn
==========================================================
printf("y = %a, \ny = %a",t1,-t1);

L1:=plot(k1*x-k1*u1,x=(e-b)..(a),linestyle=[DASH],
color=(red)):
L2:=plot(-k1*x+k1*u1,x=(e-b)..(a),linestyle=[DASH],
color=(red)):
fi;
plots[display](C1,C2,L1,L2,scaling=constrained);
elif(a+b=abs(e)) then
print("phuong trinh tiep tuyen cheo la:");
if(e>0) then
printf("x = %3.2f",a);
L1:=line([a,a], [a,-a], color=red, linestyle=5):
else
printf("x = %3.2f",-a);
L1:=line([-a,a], [-a,-a], color=red, linestyle=5):
fi;
plots[display](C1,C2,L1,scaling=constrained);
else print(" hai duong tron khong co chung tiep tuyen
cheo");
fi;
end;

Ví dụ:
> tieptuyencheo(2,1,-3);
"phuong trình tiep tuyen cheo la:"

x = -2.00

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc

Lớp Toán Tin 2 - K51 - ĐHBKHN

17


Bài toán tiếp tuyến của đường tròn
==========================================================
> tieptuyencheo(2,1,-4);
"phuong trinh tiep tuyen cheo chung la:"

y = 1.133893419*x+3.023715784
y = -1.133893419*x-3.023715784

> tieptuyencheo(2,1,3);
"phuong trình tiep tuyen cheo la:"

x = 2.00

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

18


Bài toán tiếp tuyến của đường tròn
==========================================================
> tieptuyencheo(2,1,4);
"phuong trinh tiep tuyen cheo chung la:"


y = 1.133893419*x-3.023715784,
y = -1.133893419*x+3.023715784

b/ Bài toán toán tìm tiếp tuyến ngoài:
- Nếu (C1) và (C2) chứa nhau, tức a − b > e thì 2 đường tròn này không
có tiếp tuyến chung. Suy ra không có tiếp tuyến ngoài.
- Nếu (C1) và (C2) tiếp xúc trong, tức a − b = e thì (C1) và (C2) có 1
tiếp tuyến chung duy nhất là x = a (nếu e>0) hoặc x = -a (nếu e<0).
- Nếu (C1) và (C2) có cùng bán kính, tức a = b thì (C1) và (C2) có 2 tiếp
tuyến song song với Ox là y = a và y = -a.
- Trường hợp còn lại (C1) và (C2) có 2 tiếp tuyến ngoài cắt đồng quy với
Ox tại điểm X(x,0).
+ Ta có:

x>e

và k =

a
−a 2 +

ae
a+b

2

x
a
=

x−e b

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

19


Bài toán tiếp tuyến của đường tròn
==========================================================

+ Biến đổi x theo a,b,e ta được :

Đặt u ( a, b, e ) =

x=

ae
a −b

ae
a −b

+ Gọi (P) là tiếp tuyến chéo của (C1) và (C2). Phương trình (P) có dạng :
y = k.x-k.u(a,b,e)
+ Khoảng cách từ A(0,0) đến (P) là :
kae
a −b

k 2 +1

=a

+ Giải phương trình trên với điều kiện k>0 được
a
k=
2
ae
−a 2 +
a+b
+ Thay k vào phương trình (P) được 1 phương trình tiếp tuyến cần tìm.

+ Tiếp tuyến thứ 2 đối xứng với (P) qua Ox và có phương trình là
y = -kx+ku(a,b,e)
CODE:
>restart: with(geometry): with(plottools):
tieptuyenngoai:=proc(a,b,e)
local k2,u1,vk1,k1,t1,C1,C2,L1,L2,A,f;
C1:=circle([0,0],a,color=blue):
C2:=circle([e,0],b,color=blue):
if(abs(a-b)>abs(e)) then # truong hop chua nhau
print("2 duong tron khong co tiep tuyen chung");
else print("phuong trinh tiep tuyen chung la:");
if((a-b)=e) then

# truong hop tiep xuc trong phia x>0

printf("x = %3.2f",a);
L1:=line([a,2], [a,-2], color=red, linestyle=5):

plots[display](C1,C2,L1,scaling=constrained);
elif((b-a)=e) then # truong hop tiep xuc trong phia x<0
printf("x = %3.2f",-a);
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

20


Bài toán tiếp tuyến của đường tròn
==========================================================
L1:=line([-a,2], [-a,-2], color=red, linestyle=5):
plots[display](C1,C2,L1,scaling=constrained);
elif(a=b) then
printf("y = %3.2f,\ny = %3.2f ", a,-a);
if (e>0) then
L1:=line([-a,a], [e+a,a], color=red, linestyle=5):
L2:=line([-a,-a], [e+a,-a], color=red, linestyle=5):
else
L1:=line([e-a,a], [a,a], color=red, linestyle=5):
L2:=line([e-a,-a], [a,-a], color=red, linestyle=5):
fi;
plots[display](C1,C2,L1,L2,scaling=constrained);
else
u1:=a*e/(a-b):
if(u1>0) then
f:=(k*u1/sqrt(1+k^2)=a);
vk1:= fsolve(%,k):

k1:=simplify(op(select(i->sign(i)>0,[%]))):
t1:=simplify(k1*x-k1*u1);
printf("y = %a, \ny = %a",t1,-t1);
if(e>0) then
L1:= plot(k1*x-k1*u1,x=(a)..(e+b),linestyle=[DASH],
color=(red)):
L2:=plot(-k1*x+k1*u1,x=(-a)..(e+b),linestyle=[DASH],
color=(red)):
else
L1:= plot(k1*x-k1*u1, x=(e-a)..(b),linestyle=[DASH],
color=(red)):
L2:=plot(-k1*x+k1*u1,x=(e-a)..(b),linestyle=[DASH],
color=(red)):
fi;
plots[display](C1,C2,L1,L2,scaling=constrained);
elif(u1<0) then
f:=(k*u1/sqrt(1+k^2)=-a);
==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

21


Bài toán tiếp tuyến của đường tròn
==========================================================
vk1:= fsolve(%,k):
k1:=simplify(op(select(i->sign(i)>0,[%]))):
t1:=simplify(k1*x-k1*u1);

printf("y = %a, \ny = %a",t1,-t1);
if(e>0) then
L1:=plot(k1*x-k1*u1,x=(-a)..(e+b),linestyle=[DASH],
color=(red)):
L2:=plot(-k1*x+k1*u1,x=(-a)..(e+b),linestyle=[DASH],
color=(red)):
else
L1:=plot(k1*x-k1*u1,x=(e-a)..(b),linestyle=[DASH],
color=(red)):
L2:=plot(-k1*x+k1*u1,x=(e-a)..(b), linestyle=[DASH],
color=(red)):
fi;
plots[display](C1,C2,L1,L2,scaling=constrained);
fi;
fi;
fi;
end;

Ví dụ:
> tieptuyenngoai(1,1,-3);
"phuong trinh tiep tuyen chung la:"

y = 1.00,
y = -1.00

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN


22


Bài toán tiếp tuyến của đường tròn
==========================================================
> tieptuyenngoai(1,1,3);
"phuong trinh tiep tuyen chung la:"

y = 1.00,
y = -1.00

> tieptuyenngoai(3,1,2);
"phuong trinh tiep tuyen chung la:"

x = 3.00

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

23


Bài toán tiếp tuyến của đường tròn
==========================================================
> tieptuyenngoai(2,1,-1);
"phuong trinh tiep tuyen chung la:"

x = -2.00


> tieptuyenngoai(2,1,2);
"phuong trinh tiep tuyen chung la:"

y = .5773502692*x-2.309401077,
y = -.5773502692*x+2.309401077

==========================================================
Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

24


Bài toán tiếp tuyến của đường tròn
==========================================================
> tieptuyenngoai(2,1,3);
"phuong trinh tiep tuyen chung la:"

y = .3535533906*x-2.121320344,
y = -.3535533906*x+2.121320344

> tieptuyenngoai(2,1,-3);
"phuong trinh tiep tuyen chung la:"

y = .3535533906*x+2.121320344,
y = -.3535533906*x-2.121320344

==========================================================

Giảng viên : Nguyễn Hữu Điển.
Sinh viên : Đỗ Phương Liên – Nguyễn Thị Cúc
Lớp Toán Tin 2 - K51 - ĐHBKHN

25


×