Thứ Hai, 18 tháng 8, 2025

Vẽ chuỗi đường tròn papus bằng metapost

Trong đoạn code metapost dưới đây ta xây dựng một hàm để tìm ảnh của đường tròn qua phép nghịch đảo.

Đầu tiên ta tìm hiểu định nghĩa phép nghịch đảo cực $I$ phương tích $k \ne 0$ trong mặt phẳng như sau:
Hai điểm P và P' được gọi là tương ứng của nhau trong phép $\rm NĐ(I,k)$ nếu $I, P, P'$ thẳng hàng và $\overline{IP}.\overline{IP'}=k$.

Nếu $k>0$, đường tròn tâm $I$ bán kính $\sqrt{k}$ gồm toàn những điểm bất biến (hay còn gọi bất động, hay điểm kép) và được gọi là đường tròn nghịch đảo.


Trong metapost ta định nghĩa phép nghịch đảo như sau:


vardef invert(expr P, C) = 
save I, r, s, T; 
pair I; 
I = center C; 
r = abs(point 0 of C-I);
if pair P: s = abs(P-I); I if s > eps: + (P-I) / s * r / s * r fi
elseif path P: T = length P; for t=0 upto T-1: invert(point t of P, C) .. 
endfor
if cycle P: cycle else: invert(point T of P, C) fi
fi
enddef;

\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
% invert path or pair P in circle C
vardef invert(expr P, C) = 
  save I, r; pair I; numeric r;
  I = center C;
  r = abs(point 0 of C shifted -I); 
  if pair P: if abs(P-I) > 0: unitvector(P-I) 
  scaled (r/abs(P-I)*r) shifted fi I
  elseif path P:
     save T; numeric T;
     T = length P;
     for t=0 upto T-1: invert(point t of P, C) .. endfor 
     if cycle P: cycle else: invert(point T of P, C) fi
  fi
enddef;  
beginfig(1);
 
    pair A,B,C;
    numeric r; 
 
    A = origin;
    C = (10cm,0);
 
    r = 3/4;
    B = r[A,C];
 
    path c[];
    c1 = fullcircle scaled 2 abs(A-C); 
    % large circle for the inversions
    c2 = fullcircle scaled abs(A-C) shifted 1/2[A,C];
    c3 = fullcircle scaled abs(A-B) shifted 1/2[A,B];
    c4 = fullcircle scaled abs(B-C) shifted 1/2[B,C];
    c5 = invert(c4,c1);
 
    numeric d; d = abs(point 0 of c5-point 4 of c5);
 
    for i=1 upto 42:
        draw invert(c5 shifted (0,i*d), c1);
    endfor
 
    draw subpath(0,4) of c2 withcolor 2/3 blue;
    draw subpath(0,4) of c3 withcolor 2/3 blue;
    draw subpath(0,4) of c4 withcolor 2/3 blue;
 
    draw A--C;
    dotlabel.bot("$A$", A);
    dotlabel.bot("$B$", B);
    dotlabel.bot("$C$", C);
 
endfig;
\end{mplibcode}
\end{document}

Lưu các sách

  1. Sách Casio Xác suất Thống kê Trung học cơ sở 2025

Chủ Nhật, 17 tháng 8, 2025

Các chữ Hán do ba chữ ghép thành

Phần chú giải được copy từ Từ điển Thiều Chửu.



phẩm(do ba chữ khẩu tạo thành)
  • Nhiều thứ. Vật có nhiều thứ nên gọi là vật phẩm hay phẩm vật 品物. Một cái cũng gọi là phẩm.
  • Phẩm hàm. Ngày xưa đặt ra chín phẩm chính tòng, từ nhất phẩm chí cửu phẩm, để phân biệt phẩm tước cao thấp.
  • Phẩm giá. Như nhân phẩm 人品 phẩm giá người.
  • Cân lường. Như phẩm đề 品題 , phẩm bình 品評 nghĩa là cân lường đúng rồi mới đề mới nói.




thô (do ba chữ 鹿 lộc tạo thành):
  • Thô sơ. Không được tinh tế gọi là thô. Cùng nghĩa với chữ thô .
  • 鹿 lộc: Con hươu. Con đực có sừng mỗi năm thay một lần, gọi là lộc nhung 鹿茸 rất bổ. Con cái không có sừng. Giống hươu sắc lông lổ đổ, nên tục gọi là mai hoa lộc 梅花鹿 .
  • Họ Lộc.



trùng (do ba chữ trùng 虫 tạo thành):
  • Giống sâu có chân gọi là trùng, ngày xưa dùng để gọi tất cả các loài động vật. Như vũ trùng 羽 蟲 loài chim, mao trùng 毛蟲 loài thú.
  • Dị dạng của chữ 虫.


gian (do ba chữ nữ tạo thành):
  • Gian giảo. Như chữ gian .
  • Gian dâm.
  • Dị dạng của chữ .



nhiếp (do ba chữ nhĩ tạo thành):
  • Nói thầm.
  • Họ Nhiếp.
  • Thịt thái mỏng.
  • Bổ sung: thêm bộ thủ (tay): nhiếp ảnh 攝 影 : chụp ảnh.; nhiếp vị 攝 位 làm thay địa vị người khác.



sâm (do ba chữ mộc tạo thành):
  • Rậm rạp. Như sâm lâm 森 林 rừng rậm.
  • Khí tượng ảm đạm gọi là tiêu sâm 蕭森 nghĩa là mờ mịt như ở trong rừng rậm không trông thấy bóng mặt trời vậy. Nguyễn Du 阮攸 : Thảo mộc cộng tiêu sâm 江 城 草 木 共 蕭 森 (Thu dạ 秋 夜 ) Cây cỏ thảy đều tiêu điều.
  • Đông đúc. Như sâm lập 森立 đứng san sát.



oanh (do ba chữ xa tạo thành):
  • Sầm sầm, xình xịch, tiếng một đoàn xe đi.
  • Rầm rĩ.
  • Vang lừng. Như oanh oanh liệt liệt 轟 轟 烈 烈 vang lừng rực rỡ.
    Đốt thuốc nổ. Chính âm đọc là hoanh.
  • bổ sung từ mới: 轟炸機 oanh tạc cơ (máy bay ném bom)



thuý (do ba chữ mao tạo thành):
  • Lông nhỏ của giống thú.
  • Lông bụng giống chim.
  • Vật gì nhỏ mềm mà dễ nát đều gọi là thuý.
  • Cùng nghĩa như chữ thúy .



Bổ sung: (các chữ ít dùng trong tiếng Việt)


giản thể của chữ bí (gồm ba chữ bối) (Một loài giống như con rùa người ta hay khắc ở dưới bia.) Không phổ biến trong tiếng Việt.

vốn là chữ nhị (ba chữ tâm)(Cái nhị trong hoa, hoa chưa nở hẳn gọi là nhị, cây cỏ bùm tum.)

tiên (ba chữ ngư) cũng như chữ tiên .
  • Cá tươi. Ngày xưa gọi các thứ cá ba ba là tiên thực 鮮 食
  • Tươi, cá thịt mới làm, rau quả mới hái đều gọi là tiên. Như tiên hoa 鮮 花 hoa tươi.
  • Tục gọi mùi ngon là tiên.
  • Tốt đẹp. Như tiên minh 鮮 明 tươi đẹp, rực rỡ, tiên nghiên 鮮 妍 tươi đẹp.
  • Một âm là tiển. Ít.


diễm Tia lửa sáng, lửa tóe hoa cải.


miểu (Nước mông mênh), ít dùng trong tiếng Việt

lỗi (Nhiều đá, cao lớn), lỗi lạc 磊 落 lỗi lạc, tài cán hơn người, tâm địa quang minh.


tinh (Trong suốt). Vật gì có chất sáng suốt bên nọ sang bên kia gọi là tinh oánh 晶 瑩.Thủy tinh, là một thứ đá sáng suốt như ngọc. Chất mỏ kết hợp lại thành hạt gọi là kết tinh 結 晶.


Chúng, giản thể của chữ .
  • Đông, nhiều. Như chúng sinh 眾 生 các loài có sống có chết, có cảm giác, chúng hoạn 眾 患 các bệnh tật.
  • Người, mọi người.
  • Số người. Như nhược can chúng 若 干 眾 ngần ấy kẻ.



lôi (Khoảng ruộng). Một âm là lũy, cũng như chữ .

Chùm macro về phương pháp tọa độ trong không gian (Bài 1)

Sang học kỳ 2 các thầy cô dạy lớp 12 bắt đầu giảng cho học sinh các phép tính vectơ trong không gian. Thầy Sơn viết một số các macro hữu ích để các thầy cô thuận tiện trong việc trình bày lời giải khi soạn tài liệu giảng dạy.\bigskip Để sử dụng các macro này, các thầy cô chỉ cần copy code của macro trong file này nhúng vào file TeX đang soạn và gọi macro bằng cách xem các ví dụ trong file TeX. \bigskip Trong bài này chúng tôi đã soạn xong macro về giao điểm của đường thẳng và mặt phẳng.

\newcommand{\gddtmp}[9]{

\SUBTRACT{0}{#4}{\amA}
\SUBTRACT{0}{#5}{\amB}
\ABSVALUE{#4}{\tdam}
\ABSVALUE{#5}{\tdah}
\def\Tdah{\ifthenelse{\tdah=1}{}{\tdah}}
\ABSVALUE{#6}{\tdab}
\def\Tdab{\ifthenelse{\tdab=1}{}{\tdab}}
\ABSVALUE{#7}{\tdA}
\ABSVALUE{#8}{\tdB}
\ABSVALUE{#9}{\tdC}
\def\chuA{\ifthenelse{#7=1}{}{#7}}
\def\chuB{\ifthenelse{\tdB=1}{}{\tdB}}
\def\chuC{\ifthenelse{\tdC=1}{}{\tdC}}

\def\chutdam{\ifthenelse{\tdam=1}{}{\tdam}}

\MULTIPLY{#5}{#1}{\bxk}
\MULTIPLY{#4}{#2}{\ayk}
\SUBTRACT{\bxk}{\ayk}{\bxktayk}
\ABSVALUE{\bxktayk}{\tdbxktayk}
\MULTIPLY{#6}{#2}{\cyk}
\MULTIPLY{#5}{#3}{\bzk}
\SUBTRACT{\cyk}{\bzk}{\cyktbzk}
\ABSVALUE{\cyktbzk}{\tdcyktbzk}

\def\dauctxptm{\ifthenelse{#5>0}{}{-}}
\def\dauctypth{\ifthenelse{#6>0}{+}{-}}
\def\dauctyptm{\ifthenelse{#4>0}{-}{+}}
\def\dauctzpth{\ifthenelse{#5>0}{-}{+}}
\def\dauctpty{\ifthenelse{#8>0}{+}{-}}
\def\dauctptz{\ifthenelse{#9>0}{+}{-}}

\def\gddtmpmore##1
{%nội dung
\def\daucasioDcv{\ifthenelse{##1>0}{z}{}}
\ABSVALUE{##1}{\tdD}
\SUBTRACT{0}{##1}{\amD}
\SOLVELINEARSYSTEM(#5,\amA,0;0,#6,\amB;#7,#8,#9)%
(\bxktayk,\cyktbzk,\amD)%
(\sola,\solb,\solc)
\def\chuyenveD{\ifthenelse{##1>0}{-}{}}
Toạ độ giao điểm của $d$ và $(P)$ là nghiệm của hệ phương trình:		
$$\left\{\begin{array}{rrrrrlr}
\dauctxptm \Tdah x&\dauctyptm& \chutdam y&&&=&\bxktayk\\
&& \dauctypth\Tdab y &\dauctzpth &\Tdah z&=&\cyktbzk\\
\chuA x &\dauctpty & \chuB y &\dauctptz & \chuC z &=&\chuyenveD \tdD
\end{array} 
\right. \Leftrightarrow \left\{\begin{array}{llr}x&=&\sola\\
y&=&\solb\\
z&=&\solc\end{array} \right.$$
\bigskip 

Vậy toạ độ giao điểm của $d$ và $(P)$ là $I(\sola;\solb;\solc)$.
}%nội dung
\gddtmpmore
}

Ví dụ 1: Cho đường thẳng $d:\dfrac{x-9}{4}=\dfrac{y-12}{5}=\dfrac{z-15}{6}$ và mặt phẳng \\ $(P): 4x+5y+6z-32=0$. Xác định giao điểm của $d$ và $(P)$.


BÀI GIẢI
\gddtmp{9}{12}{15}{4}{5}{6}{4}{5}{6}{-32}

Ví dụ 2: Cho đường thẳng $d:\dfrac{x-1}{1}=\dfrac{y+1}{-2}=\dfrac{z}{6}$ và mặt phẳng \\ $(P): 2x+3y+z-1=0$. Xác định giao điểm của $d$ và $(P)$.

BÀI GIẢI

\gddtmp{1}{-1}{0}{1}{-2}{6}{2}{3}{1}{-1}

 



Ví dụ 3: Tìm hình chiếu vuông góc của điểm $P(2;-1;3)$ lên đường thẳng $$d:\left\{\begin{array}{l}x=3t\\ y=5t-7 \\ z=2t+2\end{array} \right.$$
Ta gọi macro
\gddtmp{0}{-7}{2}{3}{5}{2}{3}{5}{2}{-7}
BÀI GIẢI

Ta tìm giao điểm của đường thẳng $d$ và mặt phẳng $$(P):3(x-2)+5(y+1)+2(z-3)=0$$
\gddtmp{0}{-7}{2}{3}{5}{2}{3}{5}{2}{-7}


Do đó hình chiếu của điểm $P$ trên đường thẳng $d$ là:
$I(\sola;\solb;\solc)$.

 



Ví dụ 4: Tìm hình chiếu vuông góc của điểm $P(5;2;-1)$ trên mặt phẳng $(P): 2x-y+3z+23=0$.

BÀI GIẢI
Ta tìm toạ độ giao điểm của đường thẳng $$d:\left\{\begin{array}{l}x=5+2t\\ y=2-t\\ z=-1+3t\end{array} \right.$$ với mặt phẳng $(P)$.
Gọi macro
\gddtmp{5}{2}{-1}{2}{-1}{3}{2}{-1}{3}{23}
\gddtmp{5}{2}{-1}{2}{-1}{3}{2}{-1}{3}{23}


Do đó hình chiếu của điểm $P$ trên mặt phẳng $(P)$ là:
$I(\sola;\solb;\solc)$.

Ví dụ 5: Cho mặt cầu $(S):(x-3)^2+(y+2)^2+(z-1)^2=100$ và mặt phẳng $(P):2x-2y-z+9=0$. Biết mặt cầu và mặt phẳng cắt nhau, xác định tâm của đường tròn giao tuyến.

BÀI GIẢI

Tâm của đường tròn giao tuyến là giao điểm của mặt phẳng $(P)$ với đường thẳng $d:\dfrac{x-3}{2}=\dfrac{y+2}{-2}=\dfrac{z-1}{-1}$.
Gọi macro
\gddtmp{3}{-2}{1}{2}{-2}{-1}{2}{-2}{-1}{9}
\gddtmp{3}{-2}{1}{2}{-2}{-1}{2}{-2}{-1}{9}


Do đó tâm của đường tròn giao tuyến là
$I(\sola;\solb;\solc)$.


Download file TeX

Giải hệ 2 phương trình đồng dư khi các mod không nguyên tố cùng nhau

Bài toán: Cho hệ phương trình $$\left\lbrace\begin{array}{l}x \equiv a_1\quad (\text{mod}\ m_1)\\ x \equiv a_2\quad (\text{mod}\ m_2)\end{array} \right. $$ Nếu $m_1, m_2$ nguyên tố cùng nhau, nghĩa là $\text{gcd} (m_1,m_2)=1$ thì hệ phương trình có nghiệm duy nhất: $$x=a_1m_2z_2+a_2m_1z_1+km_1m_2\quad (k \in \mathbb{Z})$$ trong đó $z_2$ là nghich đảo của $m_2$ theo mô-đu-lô $m_1$ và $z_1$ là nghịch đảo của $m_1$ theo mô-đu-lô $m_2$.


Bây giờ ta xét khi $m_1, m_2$ không nguyên tố cùng nhau. Trong trường hợp này hệ phương trình có nghiệm khi và chỉ khi $a_1\equiv a_2 \quad \text{mod}\ \text{gcd} (m_1,m_2) $. (nghĩa là $a_2-a_1$ chia hết cho $\text{gcd}(m_1,m_2)$).

Khi đó nghiệm duy nhất của hệ phương trình là $$x \equiv c\quad \text{mod}\ \text{lcm} (m_1,m_2)$$ với $c$ được xác định như sau:
  • Đặt $M_1=\dfrac{m_1}{\text{gcd}(m_1,m_2)}$,
  • $M_2=\dfrac{m_2}{\text{gcd}(m_1,m_2)}$
  • $z_3$ là nghịch đảo của $M_1$ theo mô-đu-lô $M_2$.
  • Khi đó $$c=a_1+m_1.c'$$ với $c' \equiv \dfrac{a_2-a_1}{\text{gcd} (m_1,m_2)}.z_3\quad (\text{mod}\ M_2)$.



Bằng cách sử dụng phép chia có dư ta chọn $c'$ phù hợp với yêu cầu bài toán để tính được $c$.

Bài tập áp dụng: Giải hệ phương trình $\left\lbrace\begin{array}{l}x\equiv 45\quad \ \ (\text{mod} \ 1358)\\ x\equiv 117\quad (\text{mod} \ 3518)\end{array} \right. $


Ta có:
  • $\text{gcd}(1358,3518) =2, \text{lcm}(1358,3518) =2388722$.
  • $M_1=\dfrac{1358}{\text{gcd}(1358,3518)}=679, M_2=\dfrac{3518}{\text{gcd}(1358,3518)}=1759,$
  • $\dfrac{a_2-a_1}{\text{gcd} (m_1,m_2)}=36$.
  • Dùng thuật toán tìm nghịch đảo mô-đu-lô trên bảng tính ta có: $z_3=715$.

Vậy nghiệm của hệ phương trình là $$x\equiv 1512857\quad (\text{mod}\ 2388722)$$

Dùng LuaLaTeX tính tứ phân vị của mẫu SLGN

\documentclass[12pt,a4paper]{article}
\usepackage{fontspec}
\setmainfont{arial}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{ProfLycee}
\useproflyclib{pythontex}
\usepackage{unicode-math}
\setmathfont[Extension =.otf,BoldFont = XITSMath-Bold]{XITSMath-Regular}
\begin{document}
\MedianeQuartilesECC
{40,42,44,46,48,50,52,54}
{4,4,5,10,14,8,5}
$Q_1 = \ValPremQuartile$\par
$\text{Trung v\d i} = \ValMed$\par
$Q_3 = \ValTroisQuartile$\par
\end{document}

Sử dụng Xint tìm dư của phép chia

\documentclass[12pt]{article}
\usepackage{fourier}
\usepackage[utf8]{vietnam}
\usepackage{times} 
\usepackage{amsmath}
\usepackage{xintexpr}
\usepackage[paperwidth=21cm,paperheight=17cm,left=1cm,
right=2cm,top=1cm,bottom=1.5cm]{geometry}
\begin{document}
\parindent=0pt
\def\allowsplits #1{\ifx #1\relax \else #1\hskip 0pt plus 1pt\relax
\expandafter\allowsplits\fi}%
\def\printnumber #1{\expandafter\allowsplits \romannumeral-`0#1\relax }%

\def\x{2026}

$A=\dfrac{10^{\x}-18325}{81}=$\bigskip 

\parbox{19cm}{\printnumber{\xintiieval{irem((10^(\x)-18235),81)}}\newline }
\end{document}

Nếu Ubuntu không đọc được đĩa cứng gắn ngoài sdb1

sudo ntfsfix -d /dev/sdb1

Link tới một slide trong Beamer

Frame đích (gồm nhiều slide) tạo bởi macro \pause
\newcommand{\ppt}[6]{
\usebackgroundtemplate{
\includegraphics[width=1.25\textwidth]{TRANG}}
\begin{frame}<1->[label=#2]  % chú ý dòng này
\transwipe[direction=0] 
\frametitle{} 
{
\begin{flushright}\lienket{#1}{{\scriptsize 
\faStepBackward}} \ \ 
\lienket{#3}{{\scriptsize \faStepForward}}  \\ 
\vspace*{-.25cm}
\end{flushright}
}		
\begin{columns}\column{1.046\textwidth}
\begin{block} {\color{yellow} {\scriptsize \textbf{#4}}}	
{\footnotesize #5} \\
\end{block}\end{columns}\bigskip
	  
\color{black}\footnotesize #6\pause 
\vspace*{\textheight}
\end{frame} 
}


Trong frame nguồn, viết link sau đây
\lienket{bay<9>}{Trở lại}

trong đó bay là frame đích và số 9 là đếm số lần dừng, hay nói cách cách khác là $\fbox{slide thứ 9 của frame bay}$

Thứ Bảy, 16 tháng 8, 2025

Em đi bỏ mặc con đường

Thuở ấy có một người đến rồi đi. Ra đi để mưu cầu một bữa tiệc trần gian khác. Dưới mái hiên xưa có một người ở lại, đứng ngồi và ngẫm nghĩ. Có những thuở ấy và bây giờ. Những thuở ấy mộng mị và bây giờ tĩnh thức. Tĩnh thức để chuẩn bị bước vào những cơn mộng mị khác hoặc trầm ngâm thả mình nổi trôi trên những bọt bèo của một cuộc Lễ – hội – Tình đã tàn phai.

Có thể có những ngày xưa sầm uất, phồn thịnh bằng những giấc mơ đời tưởng chừng như bất tận và những ngày nay băng giá trong những lời nguyền rủa tố tụng ở pháp đình. Hôm nay rồi sẽ là hôm qua, sẽ là một ngày xưa khác trong truyền thuyết rao giảng của kẻ bị cắt lìa những tĩnh mạch khỏi một cuộc tình.

Ai cũng đã từng đi qua một ngày xưa, giữ gìn hoặc đã gởi vào quên lãng một bóng hình, một số phận không còn thuộc về mình nữa. Trong cái hành lang dẫn đi từ quá khứ đến hôm nay có một dòng thơ cứ chảy mãi qua những con người, dù khổ đau hay hân hoan, dù tóc còn xanh hay đã bạc, đã không ngừng tự nguyện làm kẻ hành giả kể lại câu chuyện cổ tích của đời tình riêng.

Thơ tình được góp nhặt lại nơi đây cũng là một loại Kinh thi của đời thường, cất giữ trong nó những mảnh tình buồn vui, thơ mộng hoặc đọa đày của một quãng đời dài được thu gọn trong vài thế hệ.

“Il étail une fois” hay “Ngày Xưa Hoàng Thị” … và hình như thuở ấy đã có những chuyện tình như thế.

Trịnh Công Sơn


Cài đặt giả lập Casio fx-880BTG lên Macbook

1. Chuẩn bị: Trên MacBook của bạn phải có đủ công cụ, nếu chưa có thì phải download về và cài đặt lên máy. Những công cụ này bao gồm: HomeBrew, MacPort.

Lưu ý: Sau khi cài đặt HomeBrew xong, phải theo hướng dẫn của chương trình cài đặt để set path cho máy tính thấy được Brew. Các câu lệnh dưới đây các bạn sẽ gõ trên một Terminal.  

2. Dùng brew để download và cài đặt wine vào MacBook.
brew install --cask --no-quarantine wine-stable

Rất may việc cài đặt wine trên MacOS khá dễ dàng.  

3. Trên dòng lệnh, gõ:
wine --version 

để biết chắc chắn version hiện tại là 10. Sau đó gõ tiếp

winecfg


để cấu hình, khi ra một cửa sổ chỉ cần thấy (hoặc định lại) version của Windows là Windows 10 là được.

4. Dùng port để download và cài đặt winetricks.
sudo port install winetricks

5. Dùng winetricks để download và cài đặt vcrun2010
winetricks vcrun2010

Kiên trì chờ quá trình cài đặt thực hiện hoàn chỉnh.  

7. Downloads máy tính giả lập Casio fx-880BTG về máy (không cài đặt gì hết). Server đang chứa 880BTG là Casio fx-880BTG_BITEX

8. Download giả lập về giải nén đặt vào một thư mục làm việc của Macbook, ví dụ thư mục fx880Emulator. Dùng dòng lệnh đăng nhập vào thư mục, tại thư mục này ta gõ:
wine ClassWizEmulator
là xong.

 

Thư viện hình vẽ metapost

  1. Thư viện các bảng biến thiên và code
  2. Thư viện các hình HHKG và code




1) THƯ VIỆN CÁC BẢNG BIẾN THIÊN VÀ CODE


Khi soạn bài giảng môn Toán Giải tích cho các lớp 10, 11, 12 chúng ta có nhu cầu vẽ bảng biến thiên của hàm số. Có nhiều cách để vẽ bảng biến thiên này. Ở đây chúng tôi soạn sẵn các bảng biến thiên thông dụng vào một thư viện, các bạn sinh viên chỉ cần gọi bảng biến thiên ra, điều chỉnh số liệu rồi dán code vào file $\rm \TeX$.
Để sử dụng thư viện này các bạn sinh viên
  1. download tableauVarriation ở trang chủ về lưu tại thư mục chứa file $\rm \TeX\ $.
  2. Code (trên nền đen ở dưới) là các macro, không muốn dùng các macro này, các bạn dùng code trong đoạn bắt đầu từ
    \begin{mplibcode}
    đến hết
    \end{mplibcode}
    để dán vào một file $\rm Lua\LaTeX$, nhớ viết thêm vào Preamble \usepackage{mplibcode}.
  3. Mở một file $\rm \TeX$ hoặc đang soạn một file $\rm \TeX$ theo cú pháp Lua$\rm \LaTeX$. Tại dòng đứng trước \begin{document}, chèn thêm lệnh \usepackage{luamplib}

Ví dụ 1: Bảng biến thiên của hàm số chỉ có một điểm cực đại.

Ta sử dụng macro sau đây:

\newcommand{\bbtcd}[2]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) 
newLigneVariables(btex $x$ etex);val(btex $-\infty $ etex);
val(btex $#1$ etex);
val(btex $+\infty $ etex); 
newLigneSignes(btex $ f'(x)$ etex);plus; val(btex 0 etex);moins;
newLigneVariations(btex $f(x)$ etex);valPos(btex $-\infty$ etex,0); 
valPos(btex   $#2$
etex,1);valPos(btex $-\infty$ etex,0);
endTableau;
\end{mplibcode}
}
\bbtcd{x_0}{y_0}
Khi biên dịch thành công, ta có kết quả:

Thầy Sơn sẽ hướng dẫn người học, thay các biểu thức $f'(x), f(x)$ lần lượt thành $y', y$, các dấu $\pm \infty$ và các giới hạn khi $x\to \pm \infty$ bới các số hữu hạn. Ví dụ:

Ví dụ 2: Bảng biến thiên của hàm số chỉ có một điểm cực tiểu.

Ta sử dụng macro sau đây:

\newcommand{\bbtct}[2]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) 
newLigneVariables(btex $x$ etex);val(btex $-\infty $ etex);
val(btex $#1$ etex);
val(btex $+\infty $ etex); 
newLigneSignes(btex $ f'(x)$ etex);moins; val(btex 0 etex);plus;
newLigneVariations(btex $f(x)$ etex);valPos(btex $+\infty$ etex,1); 
valPos(btex   $#2$
etex,0);valPos(btex $+\infty$ etex,1);
endTableau;
\end{mplibcode}
}
\bbtct{x_0}{y_0}
Khi biên dịch thành công, ta có kết quả:

Ví dụ 3: Bảng biến thiên của hàm số có một cực đại và một cực tiểu (theo đúng thứ tự đó).

Ta sử dụng macro sau đây:

\newcommand{\bbtcdct}[4]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) 
newLigneVariables(btex $x$ etex);val(btex $-\infty $ etex);
val(btex $#1$ etex);	val(btex $#2$ etex);
val(btex $+\infty $ etex); 
newLigneSignes(btex $ f'(x)$ etex);plus; val(btex 0 etex);moins;
val(btex 0 etex);plus;
newLigneVariations(btex $f(x)$ etex);valPos(btex $-\infty$ etex,0); 
valPos(btex   $#3$etex,1);valPos(btex $#4$ etex,0); 
valPos(btex $+\infty$ etex,1);
endTableau;
\end{mplibcode}
}
\bbtcdct{x_0}{x_1}{y_0}{y_1}
Khi biên dịch thành công, ta có kết quả:

Ví dụ 4: Bảng biến thiên của hàm số có một cực tiểu và một cực đại (theo đúng thứ tự đó).

Ta sử dụng macro sau đây:

\newcommand{\bbtctcd}[4]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) 
newLigneVariables(btex $x$ etex);val(btex $-\infty $ etex);
val(btex $#1$ etex);	val(btex $#2$ etex);
val(btex $+\infty $ etex); 
newLigneSignes(btex $ f'(x)$ etex);moins; val(btex 0 etex);plus;
val(btex 0 etex);moins;
newLigneVariations(btex $f(x)$ etex);valPos(btex $+\infty$ etex,1); 
   valPos(btex   $#3$etex,0);valPos(btex $#4$ etex,1); 
valPos(btex $-\infty$ etex,0);
endTableau;
\end{mplibcode}
}
\bbtctcd{x_0}{x_1}{y_0}{y_1}
Khi biên dịch thành công, ta có kết quả:

Ví dụ 5: Bảng biến thiên của hàm số có một cực đại, một cực tiểu và một cực đại (theo đúng thứ tự đó).

Ta sử dụng macro sau đây:

\newcommand{\bbtcdctcd}[6]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) 
newLigneVariables(btex $x$ etex);val(btex $-\infty $ etex);
val(btex $#1$ etex);	val(btex $#2$ etex);val(btex $#3$ etex);
val(btex $+\infty $ etex); 
newLigneSignes(btex $ f'(x)$ etex);plus; val(btex 0 etex);moins;
val(btex 0 etex);plus;val(btex 0 etex);moins;
newLigneVariations(btex $f(x)$ etex);valPos(btex $-\infty$ etex,0); 
valPos(btex   $#4$etex,1);valPos(btex $#5$ etex,0); 
valPos(btex $#6$ etex,1); 
valPos(btex $-\infty$ etex,0);
endTableau;
\end{mplibcode}
}
\bbtcdctcd{x_0}{x_1}{x_2}{y_0}{y_1}{y_2}
Khi biên dịch thành công, ta có kết quả:

Ví dụ 6: Bảng biến thiên của hàm số có một cực tiểu, một cực đại và một cực tiểu. (theo đúng thứ tự đó).

Ta sử dụng macro sau đây:

\newcommand{\bbtctcdct}[6]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) newLigneVariables(btex $x$ etex);val(btex $-\infty $ etex);
val(btex $#1$ etex);	val(btex $#2$ etex);val(btex $#3$ etex);
val(btex $+\infty $ etex); 
newLigneSignes(btex $ f'(x)$ etex);moins; val(btex 0 etex);plus;
val(btex 0 etex);moins;val(btex 0 etex);plus;
newLigneVariations(btex $f(x)$ etex);valPos(btex $+\infty$ etex,1); 
valPos(btex   $#4$etex,0);valPos(btex $#5$ etex,1); valPos(btex $#6$ etex,0); 
valPos(btex $+\infty$ etex,1);
endTableau;
\end{mplibcode}
}

\bbtctcdct{x_0}{x_1}{x_2}{y_0}{y_1}{y_2}
Khi biên dịch thành công, ta có kết quả:

Ví dụ 7: Bảng biến thiên của hàm số nhất biến tăng.

Ta sử dụng macro sau đây:

\newcommand{\bbtnbt}[2]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) 
newLigneVariables(btex $x$ etex);
val(btex $-\infty $ etex);val(btex $#1$ etex);val(btex $+\infty $ etex);
 newLigneSignes(btex $\atop{\displaystyle f'(x)}$ etex);plus; nonDefBarre;plus;
newLigneVariations(btex $\atop{\displaystyle f(x)}$ etex);
valPos(btex $#2$ etex,0); limGauche(btex $+\infty $ etex,1);
nonDefBarre;limDroite(btex $-\infty$ etex,0);valPos(btex $#2$  etex,1);
endTableau;
\end{mplibcode}
}
\bbtnbt{x_0}{y_0}
Khi biên dịch thành công, ta có kết quả:

Ví dụ 8: Bảng biến thiên của hàm số nhất biến giảm.

Ta sử dụng macro sau đây:

\newcommand{\bbtnbg}[2]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) newLigneVariables(btex $x$ etex);
val(btex $-\infty $ etex);val(btex $#1$ etex);val(btex $+\infty $ etex);
newLigneSignes(btex $\atop{\displaystyle f'(x)}$ etex);moins; nonDefBarre;moins;
newLigneVariations(btex $\atop{\displaystyle f(x)}$ etex);
valPos(btex $#2$ etex,1); limGauche(btex $-\infty $ etex,0);
nonDefBarre;limDroite(btex $+\infty$ etex,1);valPos(btex $#2$  etex,0);
endTableau;
\end{mplibcode}
}
\bbtnbg{x_0}{y_0}
Khi biên dịch thành công, ta có kết quả:

Ví dụ 9: Bảng biến thiên của hàm số có một cực đại, một đường tiệm cận đứng và một cực tiểu (theo đúng thứ tự đó)

Ta sử dụng macro sau đây:

\newcommand{\bbtcdkxdct}[5]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) newLigneVariables(btex $x$ etex);
val(btex $-\infty $ etex);val(btex $#1$ etex);val(btex $#2$ etex);
val(btex $#3$ etex);val(btex $+\infty $ etex);
 newLigneSignes(btex $f'(x)$ etex);plus; val(btex 0 etex);moins;
 nonDefBarre;moins;val(btex 0 etex);plus;
newLigneVariations(btex $f(x)$ etex);
valPos(btex $-\infty$ etex,0); valPos(btex $#4$  etex,1);
limGauche(btex $-\infty $ etex,0);nonDefBarre;
limDroite(btex $+\infty$ etex,1);valPos(btex $#5$  etex,0);
valPos(btex $+\infty$  etex,1);
endTableau;
\end{mplibcode}
}

\bbtcdkxdct{x_1}{x_0}{x_2}{y_1}{y_2}
Khi biên dịch thành công, ta có kết quả:

Ví dụ 10: Bảng biến thiên của hàm số có một cực tiểu, một đường tiệm cận đứng và một cực đại (theo đúng thứ tự đó)

Ta sử dụng macro sau đây:

\newcommand{\bbtctkxdcd}[5]{
\begin{mplibcode}
input tableauVariation
beginTableau(0) newLigneVariables(btex $x$ etex);
val(btex $-\infty $ etex);val(btex $#1$ etex);val(btex $#2$ etex);
val(btex $#3$ etex);val(btex $+\infty $ etex);
 newLigneSignes(btex $f'(x)$ etex);moins; val(btex 0 etex);plus;
 nonDefBarre;plus;val(btex 0 etex);moins;
newLigneVariations(btex $f(x)$ etex);
valPos(btex $+\infty$ etex,1); valPos(btex $#4$  etex,0);
limGauche(btex $+\infty $ etex,1);nonDefBarre;
limDroite(btex $-\infty$ etex,0);valPos(btex $#5$  etex,1);
valPos(btex $-\infty$  etex,0);
endTableau;
\end{mplibcode}
}
\bbtctkxdcd{x_1}{x_0}{x_2}{y_1}{y_2}
Khi biên dịch thành công, ta có kết quả:



  1. Hai dạng 9 và 10 là của hàm số $y=\dfrac{ax^2+bx+c}{dx+e}$ lớp 12 sẽ học trong năm học 2024-2025.
  2. Ngoài 10 dạng phổ biến nói trên, các dạng biệt lập Thầy Sơn sẽ có hướng dẫn sau.
  3. Code của các bảng biến thiên thầy Sơn viết trong file macro_tdmu1.tex (1 là phiên bản, sau này Thầy sẽ nâng cấp dần lên để các bạn dễ sử dụng khi soạn các tài liệu giảng dạy)


2) THƯ VIỆN CÁC HÌNH TRONG HHKG


Để sử dụng thư viện các hình trong Hình học không gian, các bạn download file macro_tdmu1_1.tex ở trang chủ hay bấm vào nút về lưu tại thư mục có chứa file $\rm \TeX$ đang soạn thảo.
Mở một file $\rm \TeX$ hoặc đang soạn một file $\rm \TeX$ theo cú pháp Lua$\rm \LaTeX$. Tại dòng đứng trước \begin{document}, chèn thêm lệnh \usepackage{luamplib}.
  1. Chèn hình vẽ mặt phẳng. code
    \newcommand{\matphang}[1]{
    \begin{mplibcode}
    input couleur;
    beginfig(1);
    numeric u;
    pair t,r;
    transform T,S;
    path p;
    
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    
    pickup pencircle scaled 0.5pt;
    
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    endfig;
    end
    \end{mplibcode}
    }
    
    Cú pháp
    \matphang{}
    phần trong ngoặc là tên mặt phẳng. Ví dụ:
    \matphang{P}
  2. Chèn hình giao tuyến của hai mặt phẳng. code
    \newcommand{\giaotuyen}[3]{
    \begin{mplibcode}
    input couleur;
    beginfig(2);
    
    numeric u;
    pair t,r;
    transform T,S;
    path p[],q[];
    
    u= 1cm;
    
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    z5 = 0.5[z0,z1];
    z6 = z5 transformed S;
    z7 = (2.5u,-1u);
    z8 = z7 transformed S;
    z5 = 0.5[z9,z7];
    z10= z9 transformed S;
    p1 = z2--z6;
    q1= z9--z10;
    z11 = p1 intersectionpoint q1;
    p2 = z7--z8;
    q2= z5--z1;
    z12 = p2 intersectionpoint q2;
    
    path pp;
    pp=z7--z8--z10--z9--cycle;
    fill pp withcolor green;
    
    path ppp;
    ppp:=z5--z6--z11--z9--cycle;
    fill ppp withcolor (green+.55*bleu_ciel);
    
    path Pp;
    Pp:=z5--z12--z8--z6--cycle;
    fill Pp withcolor (green +.75*bleu_ciel);
    
    draw z5--z6 withcolor bleu; 
    draw z9--z7;
    draw z9--z10;
    draw z10--z6;
    draw z6--z3;
    draw z6--z8 dashed evenly;
    
    draw z11--z6 dashed evenly;
    draw z2--z11;
    draw z5--z12 withpen pencircle scaled 2pt;
    draw z12--z8 dashed evenly;
    draw z7--z12;
    label.rt(btex $#2$ etex, z9);
    
    label.rt(btex $#3$ etex, 0.5[z5,z6])withcolor bleu;
    endfig;
    end
    \end{mplibcode}
    }
    Cú pháp
    \giaotuyen{}{}{}
    phần trong ngoặc là tên hai mặt phẳng và tên giao tuyến. Ví dụ:
    \giaotuyen{P}{Q}{d}
  3. Chèn hình xác định mặt phẳng bởi ba điểm không thẳng hàng. code
    \newcommand{\mpABC}[4]{
    \begin{mplibcode}
    input couleur;
    beginfig(3);
    numeric u;
    pair t,r;
    transform T,S;
    
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    dotlabel.top(btex $#2$ etex, (2u,1.5u));
    dotlabel.top(btex $#3$ etex, (1u,.5u));
    dotlabel.top(btex $#4$ etex, (3u,1u));
    endfig;
    end
    \end{mplibcode}
    }
    Cú pháp
    \mpABC{}{}{}{}
    phần trong ngoặc là tên của mặt phẳng và tên của ba điểm. Ví dụ:
    \mpABC{P}{A}{B}{C}
  4. Chèn hình xác định mặt phẳng bởi hai đường thẳng cắt nhau.
    code
    \newcommand{\mpPddcn}[3]{
    \begin{mplibcode}
    input couleur;
    beginfig(4);
    numeric u;
    pair t,r;
    transform T,S;
    
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    z4 = (0.8u,1u); z5 =(4u,1.5u);draw z4--z5;
    z6 = (1u,1.6u);z7=(3.6u,0.4u);draw z6--z7;
    label.rt(btex $#2$ etex, z5);
    label.rt(btex $#3$ etex, z7);
    endfig;
    end
    \end{mplibcode}
    }

    Cú pháp
    \mpPddcn{}{}{}
    phần trong ngoặc là tên của mặt phẳng và tên của hai đường thẳng. Ví dụ:
    \mpPddcn{P}{d_1}{d_2}
  5. Chèn hình xác định mặt phẳng bởi hai đường thẳng song song.
    code
    \newcommand{\mpPddss}[3]{
    \begin{mplibcode}
    input couleur;
    beginfig(6);
    
    numeric u;
    pair t,r;
    transform T,S;
    
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    z4 = (1u,1.3u); z5 =(3u,1.8u);draw z4--z5;
    z6 = (1.5u,0.2u);z7 = z6 shifted (z5-z4);draw z6--z7;
    label.rt(btex $#2$ etex, z5);
    label.rt(btex $#3$ etex, z7);
    endfig;
    end
    \end{mplibcode}
    }
    Cú pháp
    \mpPddss{}{}{}
    phần trong ngoặc là tên của mặt phẳng và tên của hai đường thẳng. Ví dụ:
    \mpPddss{P}{d_1}{d_2}
  6. Chèn hình xác định mặt phẳng bởi một điểm và một đường thẳng.
    code
    \newcommand{\mpPAd}[3]{
    \begin{mplibcode}
    input couleur;
    beginfig(5);
    
    numeric u;
    pair t,r;
    transform T,S;
    
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    dotlabel.top(btex $#2$ etex, (2u,1.5u));
    z4 = (1u,.5u);
    z5 = (3u,1u);
    draw z4--z5;
    label.top(btex $#3$ etex, z5);
    endfig;
    end
    \end{mplibcode}
    }
    Cú pháp
    \mpPAd{}{}{}
    phần trong ngoặc là tên của mặt phẳng, của điểm và của đường thẳng. Ví dụ:
    \mpPAd{P}{A}{d}
  7. Chèn hình minh hoạ hai đường thẳng chéo nhau.
    code
    \newcommand{\cheonhauPddA}[4]{
    \begin{mplibcode}
    input couleur;
    beginfig(7);
    %representation de deux droites non parallelles et sans point commun
    numeric u;
    pair t,r;
    transform T,S;
    
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    path p[];
    
    %tracé du plan
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    %tracé de la droite
    z4 = (0.5u,.5u);
    z5 = (4u,1u);
    draw z4--z5;
    label.top(btex $#2$ etex, z5);
    
    %tracé du point
    z6 = (2u,1.5u);
    z7 = (0.2u,1u);
    dotlabel.rt(btex $#4$ etex, z6);
    
    %on met en place les pointillés
    z9 = z6 shifted 2z7;
    z10 = z6 shifted -3z7;
    p1 = z6--z10;
    p2 = z0--z1;
    z11 = p1 intersectionpoint p2;
    draw z6--z11 dashed evenly;
    draw z11--z10;
    draw z6--z9;
    
    %le nom de la droite
    label.rt(btex $#3$ etex, z10);
    endfig;
    end
    \end{mplibcode}
    }
    
    Cú pháp
    \cheonhauPddA{}{}{}{}
    phần trong ngoặc là tên của mặt phẳng chứa đường thẳng thứ nhất, đường thẳng thứ hai và giao điểm của đường thẳng và mặt phẳng. Ví dụ:
    \cheonhauPddA{P}{d_1}{d_2}{A}
  8. Chèn hình minh hoạ một mặt phẳng cắt hai mặt phẳng song song.
    code
    \newcommand{\gtmpssPQdd}[4]{
    \begin{mplibcode}
    input couleur;
    beginfig(8);
    
    numeric u;
    pair t,r;
    transform T,S;
    path p[],q[];
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    z4=(0u,-2.2u);
    z5 = z4 transformed T;
    z6 = z4 transformed S;
    z7 = z4 transformed T transformed S;
    
    path pp;
    pp:=z4--z5--z7--z6--cycle;
    fill pp withcolor 1.2*green;
    
    draw z4--z6;
    pickup pencircle scaled 2pt;
    draw z4--z5;
    draw z5--z7;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#2$ etex, z4+(0.1u,0u));
    
    z8=1/5[z0,z1]+1/2[z0,z2];
    z9=3/5[z4,z5]+1/2[z6,z4];
    
    z10 = z8 transformed S;
    
    z11 = z9 transformed S;
    p1 = z10--z11;
    q1 = z2--z3;
    q2 = z0--z1;
    q3 = z6--z7;
    z12 = p1 intersectionpoint q1;
    z13 = p1 intersectionpoint q2;
    z14 = p1 intersectionpoint q3;
    
    p2 = z8--z10;
    z15 = p2 intersectionpoint q1;
    
    p3 = z8--z9;
    z16 = p3 intersectionpoint q2;
    z17 = p3 intersectionpoint q3;
    q4 = z4--z5;
    z18 = p3 intersectionpoint q4;
    
    p4 = z9--z11;
    z19 = p4 intersectionpoint q4;
    
    path k[];
    
    k[1]:=z8--z10--z11--z9--cycle;
    fill k[1] withcolor rose;
    
    k[2]:=z8--z15--z12--z16--cycle;
    fill k[2] withcolor (.75rose+.15bleu_ciel);
    
    k[3]:=z16--z13--z12--cycle;
    fill k[3] withcolor (.75rose+.35bleu_ciel);
    
    k[4]:=z18--z17--z14--z19--cycle;
    fill k[4] withcolor (.75rose+.25green);
    
    k[5]:=z18--z19--z11--z14--cycle;
    fill k[5] withcolor (.45rose+.45green);
    
    draw z9--z19;draw z19--z11 dashed evenly;
    
    draw z8--z9;
    draw z8--z10;
    draw z10--z12; draw z12--z13 dashed evenly;draw z13--z14;draw z14--z11 dashed evenly;
    draw z2--z15; draw z15--z12 dashed evenly;draw z12--z3;
    draw z16--z12;
    draw z6--z17;draw z17--z14 dashed evenly;draw z14--z7;
    draw z18--z14;
    
    pickup pencircle scaled 2pt;
    draw z4--z5;
    draw z0--z1;
    
    
    label.rt(btex $#3$ etex, 0.5[z12,z16]);
    label.rt(btex $#4$ etex, 0.5[z18,z14]);
    endfig;
    
    end
    \end{mplibcode}
    }

    Cú pháp
    \gtmpssPQdd{}{}{}{}
    phần trong ngoặc là tên của hai mặt phẳng song song và giao tuyến của chúng với mặt phẳng thứ ba. Ví dụ:
    \gtmpssPQdd{P}{Q}{d_1}{d_2}
  9. Chèn hình minh hoạ hai mặt phẳng cắt nhau cùng song song với một đường thẳng.
    code
    \newcommand{\haimpssdtPQdd}[4]{
    \begin{mplibcode}
    input couleur;
    beginfig(9);
    
    numeric u;
    pair t,r;
    transform T,S;
    path p[];
    
    u= 1cm;
    t=(4u,1u); r=(0u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    z4=0.5[z0,z1];
    z5 = z4 transformed S;
    
    z6 = z4 shifted (1.5u,-1u);
    z4=0.5[z6,z7];
    z8 = z6 transformed S;
    z9 = z7 transformed S;
    
    p1= z4--z1;
    p2 = z6--z8;
    z10 = p1 intersectionpoint p2;
    
    p3 = z2--z3; p4 = z9--z7;
    z11 = p3 intersectionpoint p4;
    
    path k[];
    
    k[1]:=z8--z9--z7--z6--cycle;
    fill k[1] withcolor green;
    
    k[2]:=z11--z5--z4--z7--cycle;
    fill k[2] withcolor (.75bleu_ciel+green);
    
    k[3]:=z5--z8--z10--z4--cycle;
    fill k[3] withcolor (green+.55bleu_ciel);
    
    draw z5--z11;
    
    draw z11--z9;draw z11--z7 dashed evenly; draw z7--z4 dashed evenly;
    label.lft(btex $#2$ etex, z6+(0u,0.5u));
    draw z4--z5 withcolor red;
    label.lft(btex $#3$ etex,0.5[z4,z5])withcolor red;
    draw z0--z4;draw z4--z6;draw z6--z8;draw z8--z9;draw z4--z7 dashed evenly;
    draw z4--z10 dashed evenly;draw z10--z1;
    
    z12 = (-1u,0u);
    z13 = z12 shifted (0u,3u);
    draw z13--z12 withcolor red;
    label.lft(btex $#4$ etex, z12)withcolor red;
    endfig;
    end
    \end{mplibcode}
    }
    

    Cú pháp
    \haimpssdtPQdd{}{}{}{}
    phần trong ngoặc là tên của hai mặt phẳng, giao tuyến của chúng và đường thẳng mà chúng song song. Ví dụ:
    \haimpssdtPQdd{P}{Q}{d_1}{d_2}
  10. Chèn hình minh hoạ hai mặt phẳng cắt nhau lần lượt chứa hai đường thẳng song song.
    code
    \newcommand{\haimpdtssddd}[3]{
    \begin{mplibcode}
    input couleur;
    beginfig(10);
    
    numeric u;
    pair t,r,v;
    transform T,S,V;
    path p[];
    
    u= 1cm;
    t=(3u,2u); r=(-2u,1.5u);v=(-3u,0u); 
    T = identity shifted t;
    S = identity shifted r;
    V = identity shifted v;
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed S transformed T;
    z4 = z0 transformed V;
    z5 = z0 transformed V transformed T;
    
    z101=0.1[z0,z1]; z10=0.9[z0,z1];
    z23 = z101 transformed S; z32=z10 transformed S;
    z45 = z101 transformed V; z54=z10 transformed V;
    
    p1 = z101--z23; p2 = z4--z5;
    z11 = p1 intersectionpoint p2;
    
    path k[];
    
    k[1]:=z45--z54--z32--z23--cycle;
    fill k[1] withcolor green;
    
    k[3]:=z23--z101--z10--z32--cycle;
    fill k[3] withcolor bleu_ciel;
    
    k[2]:=z23--z32--z54--z11--cycle;
    fill k[2] withcolor (.75bleu_ciel+green);
    
    draw z0--z1 ;
    draw z2--z3 withcolor red;
    
    draw z101--z23 ; draw z10--z32 ;
    draw z23--z45 ; draw z32--z54 dashed evenly ;
    
    draw z4--z11 ;
    draw z11--z5 dashed evenly ;
    
    label.rt(btex $#1$ etex, z0);
    label.rt(btex $#2$ etex, z4);
    label.top(btex $#3$ etex, z2);
    
    endfig;
    end
    \end{mplibcode}
    }
    

    Cú pháp
    \haimpdtssddd{}{}{}
    phần trong ngoặc là tên của ba đường thẳng, trong đó đường thẳng thứ ba là giao tuyến.
    \haimpdtssddd{d_1}{d_2}{d_3}
  11. Chèn hình minh hoạ điều kiện cần và đủ cho đường thẳng song song mặt phẳng.
    code
    \newcommand{\dtssmpdPd}[3]{
    \begin{mplibcode}
    input couleur;
    beginfig(12);
    
    numeric u;
    pair t,r;
    transform T,S;
    
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#2$ etex, z0+(0.1u,0u));
    
    z4 = (1u,.5u);
    z5 = (4u,1u);
    draw z4--z5;
    label.top(btex $#3$ etex, z4);
    
    %la droite en dehors du plan
    z6 = (1u,2.5u);
    z7 = z6 shifted z5-z4;
    draw z6--z7;
    label.top(btex $#1$ etex, z6);
    endfig;
    end
    \end{mplibcode}
    }
    

    Cú pháp
    \dtssmpdPd{}{}{}
    
    phần trong ngoặc là tên của đường thẳng, mặt phẳng và đường thẳng trong mặt phẳng.
    \dtssmpdPd{d_1}{P}{d_2}
  12. Chèn hình minh hoạ điều kiện cần và đủ cho hai mặt phẳng song song.
    code
    \newcommand{\haimpssPddQdd}[6]{
    \begin{mplibcode}
    input couleur;
    beginfig(11);
    
    numeric u;
    pair t,r;
    transform T,S;
    
    u= 1cm;
    t=(4u,0u); r=(1u,2u);
    T = identity shifted t;
    S = identity shifted r;
    
    %premier plan P
    z0=(0u,0u);
    z1 = z0 transformed T;
    z2 = z0 transformed S;
    z3 = z0 transformed T transformed S;
    
    path p;
    p:=z0--z1--z3--z2--cycle;
    fill p withcolor bleu_ciel;
    
    draw z0--z2;
    draw z2--z3;
    pickup pencircle scaled 2pt;
    draw z0--z1;
    draw z1--z3;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#1$ etex, z0+(0.1u,0u));
    
    z4 = (0.8u,1u); z5 =(4u,1.5u);draw z4--z5;
    z6 = (1u,1.6u);z7=(3.6u,0.4u);draw z6--z7;
    label.rt(btex $#2$ etex, z5);
    label.rt(btex $#3$ etex, z7);
    
    z10=(0u,-2.5u);
    z11 = z10 transformed T;
    z12 = z10 transformed S;
    z13 = z10 transformed T transformed S;
    
    path pP;
    pP:=z10--z11--z13--z12--cycle;
    fill pP withcolor green;
    
    draw z10--z12;
    draw z12--z13;
    pickup pencircle scaled 2pt;
    draw z10--z11;
    draw z11--z13;
    pickup pencircle scaled 0.5pt;
    label.urt(btex $#4$ etex, z10+(0.1u,0u));
    
    z14 = (0.8u,-1.5u); z15 =(4u,-1u);draw z14--z15;
    z16 = (1u,-0.9u);z17=(3.6u,-2.1u);draw z16--z17;
    label.rt(btex $#5$ etex, z15);
    label.rt(btex $#6$ etex, z17);
    endfig;
    end
    \end{mplibcode}
    }
    \haimpssPddQdd{}{}{}{}{}{}
    
    phần trong ngoặc là tên của hai mặt phẳng và cặp đường thẳng đồng qui nằm trong chúng.
    \haimpssPddQdd{P}{d_1}{d_2}{Q}{d'_1}{d'_2}