Tại sao không vẽ hình bằng Metapost – Bài 3

Điểm Miquel

Nếu các điểm A', B', C' nằm trên các cạnh của tam giác ABC, mỗi điểm nằm trên một cạnh (hoặc cạnh kéo dài), thì ba đường tròn Miquel (mỗi đường tròn đi qua một đỉnh của tam giác ABC và hai điểm (trong ba điểm nói trên) nằm trên hai cạnh đi qua đỉnh đó) đồng qui tại một điểm mà ta gọi là điểm Miquel.

miquel

1. Khai báo ba đỉnh của tam giác ABC

A = Point(0,0);
B = Point(8,0);
C = Point(7,4);

2. Khai báo hình bốn đỉnh toàn phần với ba đỉnh A, B, C

Gọi Q là hình bốn đỉnh toàn phần với ba đỉnh đã xác định là A, B, C, đỉnh thứ tư nằm trên cạnh AB với tỉ lệ 0.4 (nghĩa là \overrightarrow{AD} = 0.4 \overrightarrow{AB}), đỉnh thứ năm nằm trên cạnh BC với tỉ lệ 1.3 nghĩa là \overrightarrow{BE}=1.3 \overrightarrow{BC}. Đỉnh thứ sáu là giao điểm như trên hình vẽ.

Q = QComplet(A,B,C,0.4,1.3);
 D = PointDe(Q,4);
 E = PointDe(Q,5);
 F = PointDe(Q,6);

3. Định nghĩa đường tròn ngoại tiếp và ba đường tròn Miquel.

c1 = CercleCirconscrit(Triangle(A,B,C));
 c2 = CercleCirconscrit(Triangle(A,D,F));
 c3 = CercleCirconscrit(Triangle(D,B,E));
 c4 = CercleCirconscrit(Triangle(E,F,C));

4. Định nghĩa điểm Miquel là giao của hai đường tròn: Đường tròn Miquel đi qua A và đường tròn ngoại tiếp.

M = Point_((Lieu c1) intersectionpoint (Lieu c2));

5. Chiếu M xuống bốn cạnh của hình tứ giác toàn phần. Bốn hình chiếu này sẽ thẳng hàng trên một đường thẳng mà ta gọi là đường thẳng Simson.

 I = Projection(M,Droite(A,B));
 J = Projection(M,Droite(B,C));
 K = Projection(M,Droite(C,A));
 L = Projection(M,Droite(D,E));

6. vẽ hình bốn cạnh toàn phần và vẽ đường thẳng BC kéo dài (tức là đường thẳng BI)

 trace Droite(B,J)  withpen pencircle scaled 1.25 withcolor 0.5 blue;

 trace Q
    withpen pencircle scaled 2 withcolor (0.5,0.6,0.9);

7. Vẽ các đường tròn Miquel và đường tròn ngoại tiếp.

trace c1 withpen pencircle scaled 1.25 withcolor 0.5 red;
for i=2 upto 4: trace c[i] withpen pencircle scaled 1.25 withcolor  blue; endfor;

8. Vẽ đường thẳng simson.

 trace Droite(I,J) withpen pencircle scaled 1.5 withcolor 0.7red;

9. Vẽ đường chấm chấm từ M đến các hình chiếu nói trên.

trace Segment(M,I) withpen pencircle scaled 2pt dashed withdots;
 trace Segment(M,J) withpen pencircle scaled 2pt dashed withdots;
 trace Segment(M,K) withpen pencircle scaled 2pt dashed withdots;
 trace Segment(M,L) withpen pencircle scaled 2pt dashed withdots;

10. Gọi tên các điểm trong hình vẽ.

marque.top  "M";
 marque.llft "A";
 marque.lrt  "B";
 marque.lrt  "C";
 marque.bot  "D";
 marque.urt  "E";
 marque.lrt  "F";

 pointe I;
 pointe J;
 pointe K;
 pointe L;

Và sau đây là code tham số gTRD := 1.6; dùng để ấn định chiều dài của đường thẳng (vì đường thẳng dài vô tận)

input geometrie2d;
gTRD := 1.6;

beginfig(1);

 % Le quadrilatère complet
 A = Point(0,0);
 B = Point(8,0);
 C = Point(7,4);
 Q = QComplet(A,B,C,0.4,1.3);
 D = PointDe(Q,4);
 E = PointDe(Q,5);
 F = PointDe(Q,6);

 % Les cercles circonscrit
 c1 = CercleCirconscrit(Triangle(A,B,C));
 c2 = CercleCirconscrit(Triangle(A,D,F));
 c3 = CercleCirconscrit(Triangle(D,B,E));
 c4 = CercleCirconscrit(Triangle(E,F,C));

 % Le point de Miquel
 M = Point_((Lieu c1) intersectionpoint (Lieu c2));

 % Les projetés
 I = Projection(M,Droite(A,B));
 J = Projection(M,Droite(B,C));
 K = Projection(M,Droite(C,A));
 L = Projection(M,Droite(D,E));

 % Le dessin
 trace Droite(B,J)  withpen pencircle scaled 1.25 withcolor 0.5 blue;

 trace Q
    withpen pencircle scaled 2 withcolor (0.5,0.6,0.9);

 for i=1 upto 2: trace c[i] withpen pencircle scaled 1.25 withcolor 0.5 red; endfor;
  for i=3 upto 4: trace c[i] withpen pencircle scaled 1.25 withcolor  blue; endfor;

 trace Droite(I,J) withpen pencircle scaled 1.5 withcolor 0.7red;

 trace Segment(M,I) withpen pencircle scaled 2pt dashed withdots;
 trace Segment(M,J) withpen pencircle scaled 2pt dashed withdots;
 trace Segment(M,K) withpen pencircle scaled 2pt dashed withdots;
 trace Segment(M,L) withpen pencircle scaled 2pt dashed withdots;

 marque.top  "M";
 marque.llft "A";
 marque.lrt  "B";
 marque.lrt  "C";
 marque.bot  "D";
 marque.urt  "E";
 marque.lrt  "F";

 pointe I;
 pointe J;
 pointe K;
 pointe L;
endfig;
end

Kỳ sau bài tập ôn: Đường thẳng Simson

24 responses to “Tại sao không vẽ hình bằng Metapost – Bài 3

  1. Em chào Thầy! Em làm thử cách vẽ hình bằng gói metapost như mẫu của Thầy, nhưng mà chương trình Texmaker lại báo lỗi Thầy à!Thầy thử xem lại code đó có chính xác không ạ?

  2. Em cũng đã download gói geometrie2d.mp và label.mp về thư mục chứa mp nhưng vẫn cứ báo lỗi ở dòng số 7 là ”Error line 7 Unable to make mpx file.btex” Thầy sửa giúp em với, không hiểu sao chương trình cứ báo lỗi như vậy

    Vấn đề khác nữa là em cũng chạy thử lệnh liệt kê số có khoanh tròn thì báo lỗi là ”No shape named fchar is know”?

    Thưa Thầy!Em có những vấn đề sau muốn được sự giúp đỡ của Thầy!

    – Hiện tại em đang là giảng viên trường đại học Thủy lợi -cs2 ở quận Bình Thạnh. Em đang làm chuyên đề về Topo Đại số, em làm mảng bài toán hit, Thầy có tài liệu nào hay về lý thuyết Topo đại số và về mảng bài toán hit thì Thầy gửi cho em nha Thầy . Email của em là dangphuc150497@gmail.com

    – Hiện nay, chắc là Thầy đang o Sài Gòn, em muốn liên hệ với Thầy để mua sách \LaTeX của Thầy

    Mong Thầy giúp đỡ cho em. Em cảm ơn Thầy nhiều!

    • sách LaTeX bán hàng trên takara.com chuyển đến tận nhà.

      Về tô pô đại số thầy có nhiều sách, em phát biểu bài toán hit.

      Về geometrie2d, thầy sẽ cùng em chạy online để theo dõi vì sao em không chạy được.

      Về số khoanh tròn, em gửi cho thầy file TeX

    • nếu em luôn bị báo lỗi là do cài đặt chưa đầy đủ, trước măt em chạy những file đơn giản chỉ 1, 2 dòng lệnh. nếu vẫn có lỗi là do phần mềm chưa cài đặt hoàn chỉnh, phải lo phần mêm trước.

      ví dụ, em taọ file test.mp đặt trong thư mục chứa geometrie2d.mp và label.mp

      input geometrie2d;
      gTRD := 1.6;
       
      beginfig(1);
       
       A = Point(0,0);
       B = Point(8,0);
       C = Point(7,4);
       
      
       c1 = CercleCirconscrit(Triangle(A,B,C));
      
       trace c1
          withpen pencircle scaled 2 withcolor (0.5,0.6,0.9);
       
      endfig;
      end
      

      em dịch bằng mpost test.mp

      sau đó em tạo một file tex, ví dụ test.tex

      \documentclass[12pt,a4paper]{book}
      \usepackage{graphicx}
      \DeclareGraphicsRule{*}{mps}{*}{}
      \begin{document}
      \includegraphics[scale=1]{test.1}
      \end{document}
      

      em dịch bằng pdflatex và view bằng acrobat reader. Nếu có lỗi trong quá trình biên dịch file test.mp là do em cài đặt TeX chưa hoàn chỉnh.

  3. Thưa Thầy! Em đã thử chạy từng phần, tất cả đều ổn cả, duy nhất chỉ có định nghĩa điểm nằm trên, dưới, trái, phải là chương trình không hiểu kiểu khai báo này
    marque.top “M”;
    marque.llft “A”;
    marque.lrt “B”;
    marque.lrt “C”;
    marque.bot “D”;
    marque.urt “E”;
    marque.lrt “F”;

    Thầy có cách nào khắc phục được điều này không Thầy?

    Em đã đặt mua sách \LaTeX của Thầy thông qua trang web takara.vn rồi Thầy à. Em đã để địa chỉ nhận cụ thể ở TP Nha Trang, trong khoảng mấy ngày thì em có thể nhận được sách \LaTeX của Thầy?

    Em rất thích gói vẽ đồ thị tikz. Bây giờ em muốn vẽ hai đồ thị giao nhau, sau đó em muốn gạch chéo phần giao và có tô màu phần gạch chéo (hoặc tô màu luôn phần giao giữa hai đồ thị) thì làm như thế nào? Thầy có thể cho em code mẫu để em tham khảo cách làm như em vừa nói nha Thầy!

    Đây là file \TeX lệnh số có khoanh tròn mà em nói khi chạy chương trình bị lỗi, Thầy kiểm tra giúp em nha Thầy

    \documentclass[13pt,a4paper,openany,oneside]{report}
    \usepackage{amsmath,amsxtra,amssymb,latexsym, amscd,amsthm}
    \usepackage[mathscr]{eucal}
    \usepackage{color}
    %\usepackage[13pt]{vieextsizes}
    %\usepackage[utopia]{mathdesign}% Gói lệnh thiết kế chữ-công thức Toán đẹp
    \usepackage{listings}
    \usepackage{colortbl}
    %\usepackage[unicode]{hyperref}
    \usepackage[utf8]{vietnam}
    \usepackage{graphicx}
    \usepackage{multicol}
    \usepackage{longtable}
    \usepackage{indentfirst}
    \usepackage{makeidx}
    \usepackage{xspace}
    \usepackage{amsfonts}
    \usepackage{titlesec}
    \usepackage{tikz,pgf,tkz-tab}
    \usepackage{tabvar,}\usepackage{ifpdf}%Gói lệnh vẽ bảng biến thiên
    \usepackage{cancel}%Gói lệnh làm cho bỏ hạng tử ở hai vế của một phương trình
    \usepackage{enumitem} %Liệt kê với số khoanh tròn
    \usepackage{pifont}
    \usepackage{arydshln}%Lệnh kẻ đường ngang trong bảng đáp án đề thi
    \usepackage{picinpar}
    \usepackage{picture}
    \usepackage{titletoc}
    \usepackage{pb-diagram}
    \usepackage{wasysym}
    \usepackage{maybemath}
    \usepackage{aliascnt}

    % Gói lệnh dùng thước kẻ và compa vẽ ngôi sao
    \usepackage{tkz-euclide}
    %\usepackage[upright]{fourier}
    \usetkzobj{all}
    %\usepackage[unicode=true,bookmarks,colorlinks=false,pdfborder={0 0 0},breaklinks]{hyperref}
    %\usepackage{titledot}
    %\titlename{Chương}
    \usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}

    %căn lề văn bản
    %\voffset=-0.5cm
    %\setlength{\oddsidemargin}{0.97cm}
    %\setlength{\textwidth}{15.6cm}
    %\setlength{\textheight}{24.2cm}
    %\setlength{\topmargin}{0cm}

    \usepackage{makecell}
    %\newcounter{baitap}
    \theoremstyle{plain}
    \parskip 3pt
    \headsep=15pt
    %\renewcommand{\baselinestretch}{1.5}

    %%%%%%%%%%%%%%%%%%%%%
    \def\cung#1{\buildrel \frown \over{#1}}

    \def\g.#1.{\widehat{#1}}
    \newcommand{\chia}{\;\vdots\;}
    \newcommand{\kchia}{\not\vdots\;\;}
    \newcommand{\RR}{\mathbb R}
    \newcommand{\N}{\mathbb N}
    \newcommand{\C}{\mathbb C}
    \newcommand{\Z}{\mathbb Z}
    \newcommand{\Q}{\mathbb Q}
    \newcommand{\V}{\mathcal{V}}
    \newcommand{\U}{\mathcal{U}}
    \newcommand{\F}{\mathcal{F}}

    %%%%%%%%%%%%%%%%%%%%%%%%%
    \newcommand{\graphicscompanion}{\emph{The \LaTeX{} Graphics Companion}~\cite{graphicscompanion}}
    \newcommand{\hobby}{\emph{A User’s Manual for MetaPost}~\cite{metapost}}
    \newcommand{\hoenig}{\emph{\TeX{} Unbound}~\cite{unbound}}
    \newcommand{\graphicsinlatex}{\emph{Graphics in \LaTeXe{}}~\cite{ursoswald}}

    \newcommand{\hcm}{\hspace*{0.1cm}\hfill $\square$} %%%$\square$}
    \newcommand{\gy}{\vskip6pt{\noindent \it Gợi ý. }}
    \newcommand{\hgy}{\hfill}
    \newcommand{\tloi}{\addtocounter{baitap}{1}
    \par\vspace*{1ex}
    \noindent {$\triangleright$ }\textbf{\thesochuong.\thebaitap}{\ }}

    %Macco tạo số ở trong vòng tròn
    %\newcommand{\tloi}{\addtocounter{baitap}{1}

    % Đánh số trang ở giữa trên đầu
    \makeatletter
    \def\ps@myheadings{
    \def\@evenhead{\hfil\fontsize{14}{0}\selectfont{\thepage} \hfil}
    \def\@oddhead{
    \hfil\fontsize{14}{0}\selectfont{\thepage} \hfil}}
    \makeatother

    % Tạo ma trận đặc biệt

    \theoremstyle{definition}
    \newtheorem{define}{Định nghĩa}[section]
    \newtheorem{example}[define]{Ví dụ}
    \newtheorem{bt}{Bài tập}
    \newtheorem{intro}{Giới thiệu}

    \theoremstyle{plain}
    \newtheorem{theorem}{Định lý}[section]
    \newtheorem{corollary}[theorem]{Hệ quả}
    \newtheorem{lemma}{Bổ đề}[section]
    \newtheorem{proposition}{Mệnh đề}[section]
    \newtheorem{common}{Nhận xét}[section]
    \newtheorem{note}{Chú ý}[section]

    \renewcommand{\chaptername}{Chương}
    \renewcommand{\contentsname}{Mục lục}
    \renewcommand\bibname{Tài liệu tham khảo}

    %\newenvironment{bt}{\stepcounter{danhsobaitap}\par\noindent{\bfseries \thesection.\thedanhsobaitap}}{\par}
    \newcounter{danhsovidu}[section] %tao o dem moi de danh so cho vi du
    \newenvironment{vidu}{\stepcounter{danhsovidu}\par\noindent{\bfseries Ví dụ \thesection.\thedanhsovidu.}}{\par}
    \def\vt{\overrightarrow }
    \renewcommand{\baselinestretch}{1.25}
    %\usepackage{helvet} %Gói lệnh font chữ đẹp 1

    \usepackage{lmodern}%Gói lệnh font chữ đẹp 2

    %\usepackage{newcent}%Gói lệnh font chữ đẹp 3

    %\usepackage{mathpazo}%Gói lệnh font chữ đẹp 4

    %Macco tạo số ở trong vòng tròn
    \newcommand*\circled[1]{\tikz[baseline=(fchar.base)]{
    \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}

    \begin{document}

    $\circled{1}$

    \begin{enumerate}[label=\protect\circled{\arabic*}]
    \item Lời nói đầu
    \item Chương 1
    \item Chương 2
    \item Kết luận
    \end{enumerate}

    \end{document}

    Em cảm ơn Thầy nhiều!

  4. Em rất thích gói vẽ đồ thị tikz. Bây giờ em muốn vẽ hai đồ thị giao nhau trên hai trục tọa độ, sau đó em muốn gạch chéo phần giao và có tô màu phần gạch chéo (hoặc tô màu luôn phần giao giữa hai đồ thị) thì làm như thế nào? Thầy có thể cho em code mẫu để em tham khảo cách làm như em vừa nói nha Thầy!

    Và khi vẽ đồ thị xong thì làm sao để kí hiệu tên đồ thị đó ngay bên cạnh?

    • về việc đánh chéo phần giao nhau của hai đồ thị thầy chưa thực hiện trong Tikz, nhưng thầy thực hiện với pstricks (hình ảnh dẹp hơn, nhất là mũi tên) nhưng không chạy code trự tiếp trong file TeX mà phải chạy bên ngoài, rồi inclidegraphic file pdf vào.

      Thầy sẽ gửi code cho em. Viết bất cứ thứ gì vào hình vẽ với pstricks hay với TiKz đều rất dễ thực hiện, thầy sẽ hướng dẫn.

  5. Vâng! Thầy gửi code mẫu cho em tham khảo thử nha Thầy!

    Về lệnh khai báo điểm nằm trên, dưới, trái, phải là Texmaker không hiểu kiểu khai báo này
    marque.top “M”;
    marque.llft “A”;
    marque.lrt “B”;
    marque.lrt “C”;
    marque.bot “D”;
    marque.urt “E”;
    marque.lrt “F”;

    Thầy khắc phục giúp e nha Thầy!

    Về lệnh số có khoanh tròn, em đã gửi code \LaTeX ở trên, Thầy xem thử sao chương trình lại báo lỗi là: ”No shape named fchar is know”?

    Em cảm ơn Thầy nhiều!

  6. Em chào Thầy! Thầy có thể gửi cho e xem code mẫu về việc đánh chéo phần giao nhau của hai đồ thị thực hiện với gói pstricks và cách viết tên đồ thị ngay cạnh hình vẽ để e tham khảo được không Thầy

    Em đang rất muốn vẽ đồ thị theo kiểu như thế để phục vụ giảng dạy được tốt hơn, em mong Thầy giúp đỡ cho em, em cảm ơn Thầy rất nhiều! Em chúc Thầy và gia đình mạnh khỏe.

    • Em dùng geogebra vẽ hai đồ thị:

      1. Đường cong
      2. Đường thẳng

      sau đó em export sang LaTeX theo code pstricks như sau:

      \documentclass[10pt]{article}
      \usepackage{pstricks-add}
      \usepackage[paperwidth=6cm,paperheight=7cm,top=0cm,bottom=0cm,left=0cm,right=0cm]{geometry} 
      \pagestyle{empty}
      \begin{document}
      \psset{xunit=1.0cm,yunit=1.0cm,algebraic=true,dotstyle=o,dotsize=3pt 0,linewidth=0.8pt,arrowsize=3pt 2,arrowinset=0.25}
      \begin{pspicture*}(-0.8,-2.5)(4.75,4.5)
      \psaxes[labelFontSize=\scriptstyle,xAxis=true,yAxis=true,Dx=2,Dy=2,ticksize=-2pt 0,subticks=2]{->}(0,0)(-0.8,-2.5)(4.75,4.5)
      \psplot{1}{2}{-2*sqrt(x)}
      \psplot{4}{5}{2*sqrt(x)}
      \psplot{1}{0}{-2*sqrt(x)}
      \psplot{4}{5}{2*x-4}
      \psplot{0}{1}{2*x-4}
      \psline[linestyle=dashed,dash=1pt 1pt](4,4)(0,4)
      \psline[linestyle=dashed,dash=1pt 1pt](4,4)(4,0)
      \psline[linestyle=dashed,dash=1pt 1pt](0,-2)(1,-2)
      \psline[linestyle=dashed,dash=1pt 1pt](1,-2)(1,0)
      \rput[tl](4.5,0.4){$x$}
      \rput[tl](0.2,4.5){$y$}
      \end{pspicture*}
      \end{document}
      

      Thầy dùng gói
      \usepackage[paperwidth=6cm,paperheight=7cm,top=0cm,bottom=0cm,left=0cm,right=0cm]{geometry}

      để định kích thước của hình.

      Khi biên dịch bằng LaTeX -> dvips -> ps2pdf
      ta sẽ có một hình chưa đánh sọc.
      Muốn đánh sọc phần giới hạn giữa đường cong và đường thẳng ta thêm lệnh pscustom như ví dụ mẫu sau:

      \pscustom[fillstyle=vlines]{
      \psplot{0}{1}{2*sqrt(x)}
      \psplot{1}{4}{2*sqrt(x)}
      \psplot{4}{1}{2*x-4}
      \psplot{1}{0}{-2*sqrt(x)}
      }

      chú ý cho toạ độ kết nối liên tục để phủ khắp các miền, cụ thể
      \psplot{0}{1} \psplot{1}{4} \psplot{4}{1} \psplot{1}{0}

      Cuối cùng em có một file TeX như sau:

      \documentclass[10pt]{article}
      \usepackage{pstricks-add}
      \usepackage[paperwidth=6cm,paperheight=7cm,top=0cm,bottom=0cm,left=0cm,right=0cm]{geometry} 
      \pagestyle{empty}
      \begin{document}
      \psset{xunit=1.0cm,yunit=1.0cm,algebraic=true,dotstyle=o,dotsize=3pt 0,linewidth=0.8pt,arrowsize=3pt 2,arrowinset=0.25}
      \begin{pspicture*}(-0.8,-2.5)(4.75,4.5)
      \psaxes[labelFontSize=\scriptstyle,xAxis=true,yAxis=true,Dx=2,Dy=2,ticksize=-2pt 0,subticks=2]{->}(0,0)(-0.8,-2.5)(4.75,4.5)
      \pscustom[fillstyle=vlines]{
      \psplot{0}{1}{2*sqrt(x)}
      \psplot{1}{4}{2*sqrt(x)}
      \psplot{4}{1}{2*x-4}
      \psplot{1}{0}{-2*sqrt(x)}
      }
      \psplot{1}{2}{-2*sqrt(x)}
      \psplot{4}{5}{2*sqrt(x)}
      \psplot{1}{0}{-2*sqrt(x)}
      \psplot{4}{5}{2*x-4}
      \psplot{0}{1}{2*x-4}
      \psline[linestyle=dashed,dash=1pt 1pt](4,4)(0,4)
      \psline[linestyle=dashed,dash=1pt 1pt](4,4)(4,0)
      \psline[linestyle=dashed,dash=1pt 1pt](0,-2)(1,-2)
      \psline[linestyle=dashed,dash=1pt 1pt](1,-2)(1,0)
      \rput[tl](4.5,0.4){$x$}
      \rput[tl](0.2,4.5){$y$}
      \end{pspicture*}
      \end{document}
      

      biên dịch file này bằng LaTeX -> dvips -> ps2pdf
      ta có hình vẽ sau:

  7. Em cảm ơn Thầy rất nhiều! Em chúc Thầy và gia đình mạnh khỏe

  8. Lần trước em cũng đã đề cập đến muốn xin tài liệu của Thầy về topo đại số. Em cũng đã đọc sơ qua phần bài giảng lý thuyết đồng luân của Thầy, em thấy rất là chi tiết và cụ thể.Thầy có thể gửi cho em file tex và file pdf phần bài giảng lý thuyết topo đại số của Thầy viết cho em tham khảo được không Thầy?Email của em là dangphuc150497@gmail.com
    Em cảm ơn Thầy rất nhiều!

  9. Chào thầy, em bị một lỗi trong quá trình tập sử dụng vẽ hình bằng metapost, khi biên dịch nó báo lỗi sau:
    Error: Package pdftex.def Error: Cannot convert hinhve1.1 from MPS to PDF
    Em đã lang thang tìm hiểu trên mạng nhưng vẫn ko khắc phục được (em đã down và cập nhật graphics lại gói ), mong thầy giúp. Em cám ơn thầy.

  10. \documentclass{article}
    \usepackage[utf8]{vietnam}
    \usepackage{graphicx}
    \begin{document}
    thử nghiệm
    \begin{center}
    \parbox{10cm}{\convertMPtoPDF{hinhve1.1}{1}{1}}
    \end{center}
    \end{document}

    Còn đây là file tex hinhve1 thầy ah,
    beginfig(1)
    u:=1cm;
    pair a, b, c;
    a:=(0,0);
    b:=(3u,0);
    c:=(u,2u);
    draw a–b–c–cycle;
    label.lft(btex $A$ etex, a);
    label.rt(btex $B$ etex, b);
    label.top(btex $C$ etex, c);
    endfig;
    end;

    • file hinhve.mp em viết đúng rồi

      beginfig(1)
      u:=1cm;
      pair a, b, c;
      a:=(0,0);
      b:=(3u,0);
      c:=(u,2u);
      draw a--b--c--cycle;
      label.lft(btex $A$ etex, a);
      label.rt(btex $B$ etex, b);
      label.top(btex $C$ etex, c);
      endfig;
      end;
      

      Biên dịch file hinhve.mp bằng lệnh mpost hinhve.mp em sẽ được file hinhve.1

      File hinhve.tex (lưu ý trong file em gửi thầy, em viết hinhve1.1 là sai vì file metapost của em là hinhve.mp)

      \documentclass{article}
      \usepackage[utf8]{vietnam}
      \usepackage{graphicx}
      \begin{document}
      thử nghiệm
      \begin{center}
      \parbox{10cm}{\convertMPtoPDF{hinhve.1}{1}{1}}
      \end{center}
      \end{document}
      

      Em biên dịch lại sẽ thấy kết quả.

  11. Em đã vẽ thành công một số hình bằng metapost, cám ơn thầy nhiều!
    Chúc thầy luôn vui.

  12. Mạng bị chậm nên chưa nhận được bài Thầy ơi. Giờ không thấy rồi. Chúc Thầy buổi chiều vui vẻ!

  13. Rồi cũng thực hành xong bài này https://www.writelatex.com/read/bmgvmnhszmqn
    Cám ơn Th Sơn nhiều.

  14. manhha.dinhlien

    E chào thầy!
    Thầy ơi! Kiểm tra xem file như thế nào mà máy e lại không chạy được a!
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %\title{Miquel-metapost}
    \documentclass{article}
    \usepackage[paperwidth=12cm, paperheight=12cm, left=0mm,right=2mm,top=2mm,bottom=0mm]{geometry}
    \usepackage{mpgraphics}
    \begin{document}

    \begin{mpdisplay}
    lFOURIER := 1;

    string lSTRING[];
    lSTRING[0] = “alpha”;
    lSTRING[1] = “beta”;
    lSTRING[2] = “gamma”;
    lSTRING[3] = “delta”;
    lSNB = 3;

    vardef ten_chuoi(expr s) =
    save d,m,f,c,l,flag,i; string d,m,f,c;
    d := “”; m := “”; f := “”;
    l = length(s); flag := 0;
    for i:=0 upto l:
    c := substring (i,i+1) of s;
    if c = “‘”:
    f := f & c; flag := 2;
    elseif c = “_”:
    flag := 1;
    else:
    if flag = 0:
    d := d & c
    else:
    m := m & c
    fi;
    fi
    endfor;
    for i:=0 upto lSNB:
    if d = lSTRING[i]: d := “\” & d fi
    endfor;
    d := d & “_{” & m & “}” & f;
    d
    enddef;

    vardef lTEX primary s =
    write “verbatimtex” to “mptextmp.mp”;
    write “%&latex” to “mptextmp.mp”;
    write “\documentclass{article}” to “mptextmp.mp”;
    if lFOURIER=1: write “\usepackage{fourier}” to “mptextmp.mp” fi;
    write “\begin{document}” to “mptextmp.mp”;
    write “etex” to “mptextmp.mp”;
    write “btex $”& ten_chuoi(s) &”$ etex” to “mptextmp.mp”;
    write EOF to “mptextmp.mp”;
    scantokens “input mptextmp”
    enddef;

    vardef TEX primary s =
    write “verbatimtex” to “mptextmp.mp”;
    write “%&latex” to “mptextmp.mp”;
    write “\documentclass{article}” to “mptextmp.mp”;
    if lFOURIER=1: write “\usepackage{fourier}” to “mptextmp.mp” fi;
    write “\usepackage{amsmath}” to “mptextmp.mp”;
    write “\everymath{\displaystyle}” to “mptextmp.mp”;
    write “\begin{document}” to “mptextmp.mp”;
    write “etex” to “mptextmp.mp”;
    write “btex “& s &” etex” to “mptextmp.mp”;
    write EOF to “mptextmp.mp”;
    scantokens “input mptextmp”
    enddef;

    string ogT[];
    numeric ogTA[], ogTB[], ogTC[], ogTD[], ogTE[], ogTF[];
    numeric ogt, gTRD, gU, gPR;

    % ogt est le compteur des objets graphiques créés.
    ogt := 0;

    % Paramètre utilisé pour le tracé des droites. Il fixe la longueur du segment
    % tracé en fonction de la longueur du bipoint qui définit la droite.
    gTRD := 5;

    % gU est l’unité de base, ici le cm.
    gU := 1cm;
    % gENPLACE est la transformation qui place les objets … en premier.
    string gENPLACEs;
    gENPLACEs = “scaled gU”;
    def gENPLACE = scantokens gENPLACEs enddef;

    % diamètre des cercles marquant les points
    gPR := 2;

    % Point ———————————————————————–
    vardef Point (expr a,b) =
    ogT[incr ogt] = “point”;
    ogTA[ogt] = a; ogTB[ogt] = b;
    ogt
    enddef;

    % Vecteur ———————————————————————
    vardef Vecteur (expr a,b) =
    ogT[incr ogt] = “vecteur”;
    ogTA[ogt] = a; ogTB[ogt] = b;
    ogt
    enddef;

    % Droite ———————————————————————-
    vardef Droite (expr a,b) =
    ogT[incr ogt] = “droite”;
    ogTA[ogt] = a; ogTB[ogt] = b;
    ogt
    enddef;

    % Segment ———————————————————————
    vardef Segment (expr a,b) =
    ogT[incr ogt] = “segment”;
    ogTA[ogt] = a; ogTB[ogt] = b;
    ogt
    enddef;

    % TamGiac ——————————————————————–
    vardef TamGiac (expr a,b,c) =
    ogT[incr ogt] = “TamGiac”;
    ogTA[ogt] = a; ogTB[ogt] = b; ogTC[ogt] = c;
    ogt
    enddef;

    % Cercle ———————————————————————-
    vardef Cercle (expr a,b) =
    ogT[incr ogt] = “cercle”;
    ogTA[ogt] = a; ogTB[ogt] = b;
    ogt
    enddef;

    % Quadrilatère complet ——————————————————–
    vardef QComplet (expr a,b,c,d,e) =
    save p,r; pair p, numeric r;
    ogT[incr ogt] = “qcomplet”; r = ogt;
    ogTA[ogt] = a; ogTB[ogt] = b; ogTC[ogt] = c;
    ogTD[r] = Point_(d [_Point(a), _Point(b)]);
    ogTE[r] = Point_(e [_Point(b), _Point(c)]);
    p = whatever [ _Point(a), _Point(c) ];
    p = whatever [ _Point(ogTD[r]), _Point(ogTE[r]) ];
    ogTF[r] = Point_(p);
    r
    enddef;

    % IsobaryTam d’une liste de points ……………………………….
    vardef IsoBaryTam (text t) =
    save x,y,n;
    x := 0; y := 0; n := 0;
    for p_ = t:
    x := x + ogTA[p_];
    y := y + ogTB[p_];
    n := n + 1 ;
    endfor;
    if n>0: Point ((1/n)*x,(1/n)*y) fi
    enddef;

    % BaryTam des points et , est affecté du poids x, du poids 1-x
    vardef BaryTam (expr a,b,x) =
    save p; pair p;
    p = x [ _Point(a), _Point(b)];
    Point_(p)
    enddef;

    % Milieu du segement ………………………………………………
    vardef Milieu (expr a) =
    IsoBaryTam(ogTA[a],ogTB[a])
    enddef;

    % Médiatrice du segment ……………………………………………
    vardef Mediatrice (expr a) =
    save p,q; pair q;
    p = Milieu(a);
    q = _Point(p) + (_Vecteur(a) rotated 90);
    Droite(p,Point_(q))
    enddef;

    % Bissectrice de l’angle de sommet limité par les points et …….
    vardef Bissectrice (expr a,b,c) =
    save p,q,r,t; pair p,q,r,t;
    q = _Point(b);
    p = q + unitvector(_Point(a) – q);
    r = q + unitvector(_Point(c) – q);
    t – p = whatever * (q – p) rotated 90;
    t – r = whatever * (q – r) rotated 90;
    Droite(b,Point_(t))
    enddef;

    % Perpendiculaire à la droite passant par ………………………..
    vardef Perpendiculaire (expr a,b) =
    Droite(a,Point_(_Point(a) + (_Vecteur(b) rotated 90)))
    enddef;

    % Intersection des droites et …………………………………..
    vardef Intersection (expr a,b) =
    save p; pair p;
    p = whatever [ _Point(ogTA[a]), _Point(ogTB[a]) ];
    p = whatever [ _Point(ogTA[b]), _Point(ogTB[b]) ];
    Point_(p)
    enddef;

    % Projection du point sur la droite ……………………………..
    vardef Projection (expr a,b) =
    Point_(_Projection(a,b))
    enddef;

    % OrthoTam du TamGiac ………………………………………….
    vardef OrthoTam (expr t) =
    Intersection(
    Perpendiculaire(PointDe(t,1),Droite(PointDe(t,2),PointDe(t,3))),
    Perpendiculaire(PointDe(t,2),Droite(PointDe(t,3),PointDe(t,1)))
    )
    enddef;

    % Symétrique de par rapport au point ou à la droite ……………….
    vardef DoiXung (expr a,b) =
    if ogT[b] = “point”:
    Point_(2 [_Point(a), _Point(b)])
    else:
    Point_(_Point(a) reflectedabout (_Point(ogTA[b]),_Point(ogTB[b])))
    fi
    enddef;

    % Distance entre le point et le point/droite ……………………..
    vardef Distance (expr a,b) =
    if ogT[b] = “droite”:
    abs(_Point(a) – _Projection(a,b))
    else:
    abs(_Point(a) – _Point(b))
    fi
    enddef;

    % Cercle circonscrit au TamGiac ……………………………………
    vardef DTrNgoai (expr a) =
    save p,r;
    p = Intersection(
    Mediatrice(Segment(ogTA[a],ogTB[a])),
    Mediatrice(Segment(ogTB[a],ogTC[a]))
    );
    r = Distance(p,ogTA[a]);
    Cercle(p,r)
    enddef;

    % Tam du cercle ………………………………………………..
    vardef Tam(expr a) =
    ogTA[a]
    enddef;

    % Rayon du cercle …………………………………………………
    vardef Rayon(expr a) =
    ogTB[a]
    enddef;

    %% ============================================================================
    %% Transformations
    %% ============================================================================
    vardef Rotation(expr a,b,c) =
    if path a:
    a rotatedaround (_Point(b),c)
    else:
    Point_(_Point(a) rotatedaround (_Point(b),c))
    fi
    enddef;

    %% ============================================================================
    %% objets Point, Vecteur et pairs au sens de METAPOST.
    %% Passage des uns aux autres …
    %% ============================================================================
    def _Point(expr a) = (ogTA[a],ogTB[a]) enddef;
    def Point_(expr p) = Point(xpart p,ypart p) enddef;
    let ptoPoint = Point_;
    def _Vecteur(expr a) = (_Point(ogTB[a]) – _Point(ogTA[a])) enddef;
    vardef _Projection (expr a,b) = save p; pair p;
    p = _Point(a) + whatever * _Vecteur(b) rotated 90;
    p = whatever [ _Point(ogTA[b]), _Point(ogTB[b]) ];
    p enddef;

    %% —————————————————————————-
    def PointDe(expr a,b) =
    if b = 1:
    ogTA[a]
    elseif b = 2:
    ogTB[a]
    elseif b = 3:
    ogTC[a]
    elseif b = 4:
    ogTD[a]
    elseif b = 5:
    ogTE[a]
    elseif b = 6:
    ogTF[a]
    fi
    enddef;

    def Lieu expr o =
    if ogT[o] = “TamGiac”:
    _Point(ogTA[o])–_Point(ogTB[o])–_Point(ogTC[o])–cycle
    elseif ogT[o] = “droite”:
    (gTRD [ _Point(ogTA[o]), _Point(ogTB[o]) ]) —
    (gTRD [ _Point(ogTB[o]), _Point(ogTA[o]) ])
    elseif ogT[o] = “segment”:
    _Point(ogTA[o]) — _Point(ogTB[o])
    elseif ogT[o] = “cercle”:
    fullcircle scaled (ogTB[o]*2) shifted _Point(ogTA[o])
    elseif ogT[o] = “qcomplet”:
    _Point(ogTA[o]) — _Point(ogTB[o]) — _Point(ogTE[o]) —
    _Point(ogTD[o]) — _Point(ogTA[o]) — _Point(ogTC[o]) —
    _Point(ogTE[o])
    fi
    enddef;

    def _pointe(expr p) =
    fill (fullcircle scaled gPR) shifted (p gENPLACE) withcolor white;
    draw (fullcircle scaled gPR) shifted (p gENPLACE)
    enddef;

    def trace expr p = if path p: draw p else: draw (Lieu p) fi gENPLACE enddef;

    def remplis expr p = if path p: fill p else: fill (Lieu p) fi gENPLACE enddef;

    def pointe expr p = if pair p: _pointe(p) else: _pointe(_Point(p)) fi enddef;
    vardef marque.@# expr p =
    pointe(scantokens p);
    label.@#(lTEX(p),_Point(scantokens p) gENPLACE);
    enddef;

    def gocvg(expr a,b,c,x) =
    (_Point(b) + x * unitvector(_Point(a)-_Point(b)))
    — (_Point(b) + x * unitvector(_Point(a) – _Point(b))
    + x * unitvector(_Point(c) – _Point(b)))
    — (_Point(b) + x * unitvector(_Point(c) – _Point(b)))
    enddef;

    vardef Etiquette.@#(expr s,t,p) = label.@#(TEX(s) scaled t,p gENPLACE) enddef;

    %% —————————————————————————-
    def Fenetre(expr xg,yg,xd,yd) =
    gpXG := xg;
    gpYG := yg;
    gpXD := xd;
    gpYD := yd;
    extra_endfig := “_fenetre;” & extra_endfig;
    enddef;

    def _fenetre =
    clip currentpicture to
    ((gpXG,gpYG)–(gpXG,gpYD)–(gpXD,gpYD)–(gpXD,gpYG)–cycle) gENPLACE
    enddef;

    %% Rotation globale de la figure ———————————————-
    vardef RotationDeFigure(expr a) = ;
    picture temp;
    temp = currentpicture;
    currentpicture := nullpicture;
    draw temp rotated a;
    gENPLACEs := gENPLACEs & ” rotated ” & decimal a;
    enddef;
    gTRD := 1.4;
    % Le quadrilatère complet
    A = Point(0,0);
    B = Point(8,0);
    C = Point(7,4);
    Q = QComplet(A,B,C,0.4,1.3);
    D = PointDe(Q,4);
    E = PointDe(Q,5);
    F = PointDe(Q,6);

    % Les cercles circonscrit
    c1 = DTrNgoai(TamGiac(A,B,C));
    c2 = DTrNgoai(TamGiac(A,D,F));
    c3 = DTrNgoai(TamGiac(D,B,E));
    c4 = DTrNgoai(TamGiac(E,F,C));

    % Le point de Miquel
    M = Point_((Lieu c1) intersectionpoint (Lieu c2));

    % Les projetés
    I = Projection(M,Droite(A,B));
    J = Projection(M,Droite(B,C));
    K = Projection(M,Droite(C,A));
    L = Projection(M,Droite(D,E));

    % Le dessin
    trace Droite(B,J) withpen pencircle scaled 0.5 withcolor 0.5 blue;

    trace Q
    withpen pencircle scaled 0.5 withcolor 0.5 green;

    trace c1 withpen pencircle scaled 0.5 withcolor red; endfor;
    for i=2 upto 4: trace c[i] withpen pencircle scaled 0.5 withcolor blue; endfor;

    trace Droite(I,J) withpen pencircle scaled 0.5 withcolor 0.5 red;

    trace gocvg(M,I,A,0.2);trace gocvg(M,K,A,0.2);
    trace gocvg(M,L,D,0.2);trace gocvg(M,J,C,0.2);

    trace Segment(M,I) withpen pencircle scaled 0.5 dashed evenly scaled .5;
    trace Segment(M,J) withpen pencircle scaled 0.5 dashed evenly scaled .5;
    trace Segment(M,K) withpen pencircle scaled 0.5 dashed evenly scaled .5;
    trace Segment(M,L) withpen pencircle scaled 0.5 dashed evenly scaled .5;

    marque.top “M”;
    marque.llft “A”;
    marque.rt “B”;
    marque.rt “C”;
    marque.bot “D”;
    marque.urt “E”;
    marque.lrt “F”;

    pointe I;
    pointe J;
    pointe K;
    pointe L;

    %draw bbox currentpicture;

    \end{mpdisplay}

    \end{document}

  15. manhha.dinhlien

    Thầy ơi! Tại sao những ví dụ của thầy ko hiêu sao em chạy cứ bị lỗi, em cũa đã chạy được vẽ đồ thị, và một số file bằng metapost khác download từ mạng về, nhưng không hiểu sao em cũng hay theo dõi và có cả cuốn sánh” \Latex sắp chữ-Vẽ hinh\& Đại số máy tính” của thầy nhưng có những ví dụ em chạy vẫn bình thường nhưng có những ví dụ vẫn bị lỗi trên.
    Ah mà tại sao thầy không viết một số bài về vẽ tiếp tuyến của đường tròn, tính đối xứng trục (tâm), … và tập thành sách thầy nhỉ?
    E cảm ơn thầy!

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s