[TikZ]Vẽ đường

tuhocvba

Administrator
Thành viên BQT
Mở đầu
Mã:
\documentclass[12pt]{book}
\usepackage{tikz}
\usetikzlibrary{intersections, calc, arrows.meta}
\begin{document}
\begin{tikzpicture}        
    \tikz \draw (0,0)--(2,1);
\end{tikzpicture}
\end{document}
Dòng code 1: Khai báo tài liệu chúng ta tạo thuộc lớp nào. Không có khai báo này thì bất cứ tài liệu Latex nào khi biên dịch sẽ bị lỗi. Phần này thuộc về kiến thức chung của Latex, không liên quan tới vẽ hình.
Dòng code số 2: Khai báo gói, tên đầy đủ là tikz.sty . Gói này chứa đầy đủ các công cụ cơ bản của tikz.
Dòng code số 3: Khai báo thư viện. Cụ thể:
intersections : Chúng ta có thể lấy giao điểm của hai đường.
calc: Sử dụng nó chúng ta có thể tính toán được tọa độ
arrows.meta : Sử dụng nó chúng ta có thể sử dụng được nhiều kiểu mũi tên khác nhau.

Ngoài ra có rất nhiều thư viện khác, tuy nhiên chỉ cần sử dụng 3 thư viện này cũng đủ để ta làm được nhiều việc rồi đấy.
Như vậy chúng ta đã xong phần khai báo, công tác chuẩn bị đã xong.

Tiếp theo dòng code số 4 và số 8: Tất cả những gì tiếp theo đều phải nằm trong
Mã:
\begin{document} ...   \end{document}
Dòng code số 4 và số 8 chính là làm công việc này.

Tiếp theo, tôi muốn giới thiệu với các bạn lệnh vẽ hình cơ bản:
Mã:
\tikz \draw (0,0)--(2,0);
Dòng lệnh này sẽ tạo ra đoạn thẳng nối hai điểm (0,0) và (2,0) .
Bạn cần đăng nhập để thấy đính kèm

Tuy nhiên rất ít trường hợp chúng ta chỉ vẽ một đường. Thông thường là sẽ sử dụng nhiều lệnh tạo đường, như vậy chúng ta có cấu trúc sau:
Mã:
\begin{tikzpicture}
Lệnh vẽ 1
Lệnh vẽ 2
...
\end{tikzpicture}
Ví dụ:
Mã:
\begin{tikzpicture}
\draw (0,0)--(2,0);
\draw (1,1)--(3,1);
\end{tikzpicture}
Bạn cần đăng nhập để thấy đính kèm


Chúng ta hãy quay lại lệnh vẽ đoạn thẳng:
Mã:
\tikz \draw (0,0)--(2,1);
Ở đây ta chỉ định nối hai điểm có tọa độ rất rõ ràng. Tuy nhiên chúng ta có thể viết tọa độ một cách tương đối như sau:
Mã:
\tikz \draw (0+5,0)--(2+5,1);
Nếu chúng ta nối liên tiếp 3 điểm với nhau như sau:
Mã:
\tikz \draw (0,0)--(2,1)--(3,-1);
Kết quả:
Bạn cần đăng nhập để thấy đính kèm


Tạo một đường khép kín
Mã:
\tikz \draw (0,0)--(2,1)--(3,-1)--cycle;
Bạn cần đăng nhập để thấy đính kèm


Nếu không sử dụng từ khóa cycle, nếu ta sử dụng lệnh như sau:
Mã:
\tikz \draw (0,0)--(2,1)--(3,-1)--(0,0)
Đây hẳn là điều các bạn đang thắc mắc. Tất nhiên sẽ có sự khác nhau.
Hãy xem đoạn code minh họa dưới đây:
Mã:
\begin{tikzpicture}
    \draw[ultra thick] (0,0)--(2,1)--(3,-1)--cycle;
    \draw[ultra thick] (4,0)--(6,1)--(7,-1)--(4,0);
\end{tikzpicture}
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Hãy tập trung vào đỉnh tam giác bên trái. Hai hình có sự khá nhau. Hình vẽ sử dụng cycle thì tạo ra đường khép kín.
Khi không sử dụng cycle, thì hai đường chỉ chạm vào nhau tại đầu mút, mà không tạo ra một đường khép kín hoàn toàn.

Vẽ hình chữ nhật
Khai báo tọa độ hai đỉnh của đường chéo và sử dụng từ khóa rectangle(hình chũ nhật)
Mã:
\tikz \draw (0,0) rectangle (2,3);
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Vẽ đường vuông góc
Mã:
\begin{tikzpicture}
\draw (0,0)--(3,0);
\draw (1,1)--($(0,0)!(1,1)!(3,0)$);
\end{tikzpicture}
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Đầu tiên ta vẽ đoạn thẳng: (0,0) nối với (3,0)
Tiếp theo ta vẽ đường vuông góc đi qua điểm (1,1) và vuông góc với đường (0,0)--(3,0):
($(0,0)!(1,1)!(3,0)$) là hình chiếu của điểm (1,1) xuống đường (0,0)--(3,0)
Nối hình chiếu này với điểm (1,1)

Còn nữa
Nguồn:
 

tuhocvba

Administrator
Thành viên BQT
Vẽ đường tròn
Cần khai báo tâm và bán kính
Mã:
\begin{tikzpicture}
\draw(0,0) circle (1); %(0,0) là tọa độ tâm, 1 là bán kính
\draw(1,1) circle (2); %(1,1) là tọa độ tâm, 2 là bán kính
\end{tikzpicture}
Kết quả:
Bạn cần đăng nhập để thấy đính kèm


Vẽ hình Elip
Mã:
\draw (0,0) circle [x radius=2, y radius=1, rotate=30];
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

(0,0) là tâm, ta có bán kính x, bán kính y và độ nghiêng.

Vẽ cung, đường cong
Mã:
\draw (0,0) arc (30:70:3);
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Cụ thể:
Mã:
\draw (a,b) arc (s:t:r);
r là bán kính
Di chuyển từ góc nghiêng
\[ s^o => t^o \]
 

tuhocvba

Administrator
Thành viên BQT
Lệnh vẽ đường cong:
Mã:
\draw (0,0) to [out=45,in=135] (4,0);
Có nghĩa là nó tạo ra đường cong nối hai điểm (0,0) với (4,0), góc đi ra điểm (0,0) là 45 độ, góc đi vào điểm (4,0) là 135 độ.
Bạn cần đăng nhập để thấy đính kèm

Kết quả:
Bạn cần đăng nhập để thấy đính kèm
 

Euler

Administrator
Thành viên BQT
Thực hành nối điểm:
\[ (0,0) ;(2\sqrt{2},2\sqrt{2}) \]
Mã:
\draw (0,0) to [out=45,in=135] ({2*sqrt(2)},{2*sqrt(2)});
Kết quả:
Bạn cần đăng nhập để thấy đính kèm


Mã:
\draw (0,0) to [out=45,in=135] (3,3);
Kết quả:
Bạn cần đăng nhập để thấy đính kèm


Sử dụng tham số độ nghiêng:
Mã:
\draw[rotate=45] (0,0) to [out=45,in=135] (4,0);
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Vẽ đường cong các bạn có thể truy cập web sau vẽ ra code khá hay:
Nguồn:
 

vbano1

SMod
Thành viên BQT
Ghi văn bản lên bản vẽ:
Hãy xem code sau đây:
Mã:
        \draw (0,0)--(2,1)--(3,-1)--(1,-1)--cycle;
        \draw (0,0)node{A};
        \draw (2,1)node{B};
        \draw (3,-1)node{C};
        \draw (1,-1)node{D};
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Như vậy ta cần điều chỉnh một chút để tên cá đỉnh ở vị trí phù hợp hơn.
Mã:
        \draw (0,0)--(2,1)--(3,-1)--(1,-1)--cycle;
        \draw (0,0)node[left]{A};%Hiển thị bên trái
        \draw (2,1)node[above]{B};%Hiển thị phía trên
        \draw (3,-1)node[right]{C};%Hiển thị bên phải
        \draw (1,-1)node[below]{D};%Hiển thị phía dưới
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Ngoài ra chúng ta có thể kết hợp hai thuộc tính trên + trái/phải và dưới + trái/phải.
  • above right(phía trên và bên phải)
  • above left(phía trên và bên trái)
  • below right(phía dưới và bên phải)
  • below left(phía dưới và bên trái)
Ta có thể viết code gọn hơn:
Mã:
\draw (0,0)node[left]{A}--(2,1)node[above]{B}--(3,-1)node[right]{C}--(1,-1)node[below]{D}--cycle;
 

tuhocvba

Administrator
Thành viên BQT
Tiếp theo chúng ta sẽ có các tính chất của đường:
-Độ dày của đường
-Đường nét đứt hay nét liền
-Chứa mũi tên hay là không
Ví dụ:
Mã:
\tikz \draw[line width=1pt] (0,0)--(2,0);
sẽ cho kết quả là:
Bạn cần đăng nhập để thấy đính kèm

Ta có bảng độ dày như dưới đây:
Bạn cần đăng nhập để thấy đính kèm

Còn nữa
Nguồn:
 

tuhocvba

Administrator
Thành viên BQT
Kiểu dáng của đường:
Lệnh sau sẽ tạo ra đường nét đứt:
Mã:
\tikz \draw[dash pattern=on 3pt off 2pt on 5pt off 2pt] (0,0)--(5,0);
Bạn cần đăng nhập để thấy đính kèm

Thuộc tính on có nghĩa là sẽ hiển thị độ dài, nếu là off thì nó sẽ không hiển thị độ dài. Việc này cứ lặp đi lặp lại, và từ đó ta sẽ có được đường nét đứt.
Bạn cần đăng nhập để thấy đính kèm


Hãy xem kết quả của đoạn code sau:
Mã:
\begin{tikzpicture}
 \draw[densely dotted] (0,0)--(5,0);
 \draw[loosely dotted] (0,-1/2)--(5,-1/2);
\end{tikzpicture}
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Nếu bạn đưa densely vào phía trước, thì đường sẽ hiển thị với mật độ dày đặc. Ngược lại nếu bạn đưa loosely thì đường sẽ hiển thị thưa.
(Còn nữa)
Nguồn:
 

HungChau

Yêu THVBA
Mã:
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\path % khai báo tọa độ điểm và nhãn của điểm
(0,0)coordinate(O)node[below left]{$O$}
(3,0)coordinate(A)node[below]{$A$}
(2,1)coordinate(B)node[above right]{$B$}
(0,2)coordinate(C)node[above]{$C$};
\draw (O)--(A)--(B)--(C)--(O);% vẽ các đoạn thẳng liên tiếp
\foreach \p in {O,A,B,C} \fill(\p)circle(1pt);% vẽ các điểm tròn
\end{tikzpicture}

\begin{tikzpicture}
\path % khai báo tọa độ điểm
(0,0)coordinate(O)
(3,0)coordinate(A)
(2,1)coordinate(B)
(0,2)coordinate(C);
\draw (O)--(A)--(B)--(C)--(O);% vẽ các đoạn thẳng liên tiếp
\foreach \p/\g in {O/-135,A/-90,B/45,C/90} \draw[fill=white](\p)circle(1pt)node[shift={(\g:.3)}]{$\p$};% vẽ các điểm tròn rỗng và nhãn điểm
\end{tikzpicture}
\end{document}
 

HungChau

Yêu THVBA
Có thể dùng tọa độ cực. Tọa độ trọng tâm của tam giác, tọa độ trung điểm đoạn thẳng, tọa độ điểm đối xứng qua điểm


Mã:
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\path % khai báo tọa độ cực của điểm
(0:0)coordinate(O)
(0:3)coordinate(A)
(30:2.4)coordinate(B)
(90:2)coordinate(C)
(barycentric cs:A=1,B=1,C=1)coordinate(G) % trong tâm ABC
(barycentric cs:B=1,C=1)coordinate(I) % trung điểm BC
(barycentric cs:B=1,C=-2)coordinate(J); % điểm đối xứng của B qua C
\draw (O)--(A)--(B)--(C)--(O)(J)--(C)--(A)--(I);% vẽ các đoạn thẳng liên tiếp
\foreach \p/\g in {O/-135,A/-90,B/45,C/90,G/0,I/90,J/90} \draw[fill=white](\p)circle(1pt)node[shift={(\g:.2)},scale=.6]{$\p$};% vẽ các điểm tròn rỗng và nhãn điểm
\end{tikzpicture}
\end{document}
 
Top