Vẽ hình học phẳng với metapost -1
- 07/03/2025
- 137 lượt xem
| Bài toán vẽ chuỗi dây chuyền papus. Trong mặt phẳng cho ba điểm $A, C, B$ thẳng hàng theo thứ tự đó. Dựng các đường tròn đường kính $AB$ và $AC$. Hãy vẽ các đường tròn tiếp xúc ngoài nhau, tiếp xúc trong với đường tròn lớn và tiếp xúc ngoài với đường tròn nhỏ trong hai đường tròn nói trên. |

Dùng phép nghịch đảo cực A nhận đường tròn tâm $A$ bán kính $AB$ làm đường tròn nghịch đảo.
Khi đó đường tròn đường kính $AB$ sẽ biến thành đường thẳng $d_B$ tiếp xúc với đường tròn nghịch đảo tại $B$,
đường tròn đường kính $AC$ sẽ biến thành đường thẳng $d_D$ song song với đường thẳng $d_B$ và đi qua điểm $D$ là ảnh của $C$ qua phép nghịch đảo (điểm $D$ hoàn toàn dựng được bằng thước kẻ và com-pa).

Ta vẽ đường tròn đường kính $CB$ và ảnh của nó qua phép nghịch đảo, ảnh này chính là đường tròn đường kính BD.

Dùng phép tịnh tiến ta vẽ các đường tròn bằng đường tròn đường kính $BD$ và tiếp xúc với đường tròn đó.

Bây giờ ta dùng phép nghịch đảo để biến các hình tròn trong rãnh $d_B;d_D$ thành các hình tròn trong vành đai như trong hình dưới đây:

| 1. Khai báo. |
![]() |
Bắt đầu vào metapost sử dụng gói geom2d.mp , khai báo các độ dài và các điểm dựa vào độ dài đã khai báo.
\thispagestyle{empty}
\begin{mplibcode}
input geom2d;
gddU:=1.25cm;
beginfig(1);
r = 2.5;
R = 3.5;
A = Point(0,0);
B = Point(2R,0);
C = Point(2r,0);
Ta định nghĩa và ra lệnh vẽ các đường tròn: đường tròn nghịch đảo $C_A$, đường tròn $C_V$ đường kính $AB$, đường tròn $C_U$ đường kính $AC$, đường tròn đường kính $CB$ và hai đường thẳng song song là ảnh của $C_U, C_V$ qua phép nghịch đảo. Vẽ đường tròn đường kính $BD$ là ảnh của đường tròn đường kính $CB$, đồng thời xác định tâm và bán kính của nó.
C_A = Cercle(A,2*R); trace C_A dashed evenly;
C_V = CercleD(A,B); trace C_V avecCrayon(1.5,Blue);
C_U = CercleD(A,C); trace C_U avecCrayon(2,Red);
C_CB=CercleD(C,B); trace C_CB avecCrayon(1.3,DodgerBlue);
I_CU = Inversion(C_U,C_A); trace I_CU avecCrayon(2,Red);
I_CV = Inversion(C_V,C_A); trace I_CV avecCrayon(1,5,Blue);
L_AB = Droite(A,B); trace L_AB dashed evenly;
Up = IntersectionDroites(L_AB,I_CU);
Vp = IntersectionDroites(L_AB,I_CV);
Cp0 = CercleD(Vp,Up); trace Cp0;
Rp= Rayon(Cp0);
Ip[0] = Milieu(Vp,Up); pointe(Ip[0]);
Ta dùng vòng lặp để vẽ $38$ đường tròn trong rãnh $d_B;d_D$, sau đó dùng phép nghịch đảo để vẽ $38$ đường tròn nằm trong vành đai tạo bởi hai đường tròn ban đầu. Chú ý dòng lệnh thứ 3 ở dưới bị thiếu ký tự, hãy đổi if(i0) thành ![]()
N=19;
for i:=-N upto N:
if(i0):
Ip[i] = Addition(Ip[0],Point(0,i*2*Rp));
Mp[i] = Addition(Ip[i],Point(-Rp,0));
Mq[i] = Addition(Ip[i],Point(Rp,0));
Mr[i] = Addition(Ip[i],Point(0,-Rp));
Np[i] = Inversion(Mp[i],C_A);
Nq[i] = Inversion(Mq[i],C_A);
Nr[i] = Inversion(Mr[i],C_A);
T[i]=CercleTroisPoints(Mp[i],Mq[i],Mr[i]) ; trace(T[i]) avecCrayon(1.5,red);
t[i]=CercleTroisPoints(Np[i],Nq[i],Nr[i]) ; trace(t[i]) avecCrayon(1.5,blue);
fi
endfor;
Cuối cùng viết tên các điểm tham gia vào việc dựng hình.
marque.ulft "A"; marque.lrt "B"; marque.lrt "C";
Fenetre(-1,-2.5R,3*R,3*R);
endfig;
\end{mplibcode}
BITEXEDU Chuyên trang chia sẻ tài liệu, kinh nghiệm ứng dụng giải toán trên máy tính cầm tay
