[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}
 

tuhocvba

Administrator
Thành viên BQT
Vẽ đường mũi tên :
Mã:
\tikz \draw[->] (0,0)--(5,0);
Kết quả :
Bạn cần đăng nhập để thấy đính kèm

Thông số Option được mô tả như sau:
OptionHiển thị
<-
Bạn cần đăng nhập để thấy đính kèm
->
Bạn cần đăng nhập để thấy đính kèm
<->
Bạn cần đăng nhập để thấy đính kèm
->>
Bạn cần đăng nhập để thấy đính kèm

Chúng ta muốn đầu mũi tên nhọn hơn, ta vẽ :
Mã:
\tikz \draw[->,>=stealth] (0,0)--(5,0);
Bạn cần đăng nhập để thấy đính kèm

Nguồn :
 

Euler

Administrator
Thành viên BQT
Màu sắc:
Ví dụ:
Mã:
\tikz \draw[red] (0,0)--(5,0);
Kết quả:
Bạn cần đăng nhập để thấy đính kèm


Một số màu thường dùng :
red : Màu đỏ
blue : Xanh da trời
yellow : Màu vàng
green : Xanh lục
orange : Màu cam
gray : Màu xám

Trộn màu :
Mã:
\tikz \draw[red!60!blue] (0,0)--(5,0);
Kết quả :
Bạn cần đăng nhập để thấy đính kèm

Điều này có nghĩa là 60% đỏ và 40% xanh.
 

tuhocvba

Administrator
Thành viên BQT
Di chuyển đồ thị :
Mã:
\begin{tikzpicture}
\draw[->,>=stealth,semithick] (-0.5,0)--(3.5,0)node[above]{$x$}; %Trục x
\draw[->,>=stealth,semithick] (0,-0.5)--(0,3.5)node[right]{$y$}; %Trục y
\draw (0,0)node[below left]{O}; %Gốc tọa độ
\draw[dashed] (1,0)node[below]{1}--(1,1)--(0,1)node[left]{1}; %点(1,1)
\draw[red] (0,0)--(1,1)--(2,0); %Trước khi dịch chuyển
\draw[shift={(1,2)},blue] (0,0)--(1,1)--(2,0); %Sau khi dịch chuyển
\end{tikzpicture}
Bạn cần đăng nhập để thấy đính kèm

Đồ thị màu đỏ được di chuyển thành màu xanh. Hoành độ x tăng lên 1. Tung độ y tăng lên 2.
Dịch chuyển phương hoành tung
Mã:
(x:+1,y:-2)
Mã:
shift={(1,-2)}
Bạn cần đăng nhập để thấy đính kèm
Phóng to thu nhỏ
(Lấy gốc tọa độ làm tâm, phóng to 2 lần)
Mã:
scale=2
Bạn cần đăng nhập để thấy đính kèm
Phóng to thu nhỏ
(Lấy điểm (1,1) làm tâm, phóng to 2 lần)
Mã:
scale around={2:(1,1)}
Bạn cần đăng nhập để thấy đính kèm
Quay
(Lấy gốc tọa độ làm tâm, quay 20 độ)
Mã:
rotate=20
Bạn cần đăng nhập để thấy đính kèm
Quay
(Lấy điểm (1,1) làm tâm, quay 20 độ)
Mã:
rotate around={20:(1,1)}
Bạn cần đăng nhập để thấy đính kèm
 
T

thanhphong

Guest
Các kiểu dáng khác:
Kiểu đườngOptionOutput
Đường đôidouble
Bạn cần đăng nhập để thấy đính kèm
Đường đôi, ở giữa màu đỏdouble=red
Bạn cần đăng nhập để thấy đính kèm
Đường đôi khe ở giữa là 2ptdouble distance=2pt
Bạn cần đăng nhập để thấy đính kèm
Độ trong suốtopacity=.6
Bạn cần đăng nhập để thấy đính kèm
 

Euler

Administrator
Thành viên BQT
Vẽ đồ thị :
Với Tikz chúng ta không chỉ vẽ được đồ thị của các hàm số như là:
\[ y=x^2+x,y=\sin (x) \]
Ta còn có thể biểu diễn đồ thị dưới dạng :
\[ (x(t),y(t)) \]
Ta sẽ sử dụng ba thư viên chính là : ”intersections”, “calc”, “arrows.meta” :
Khai báo:
\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\usetikzlibrary{intersections,calc,arrows.meta}
 
\begin{document}
 
\end{document}
1. Phương pháp vẽ đồ thị cơ bản :
Mã:
\begin{tikzpicture}
 \draw[->,>=stealth,semithick] (-2,0)--(2,0)node[above]{$x$}; %Trục x
 \draw[->,>=stealth,semithick] (0,-1)--(0,3)node[right]{$y$}; %Trục y
 \draw (0,0)node[below right]{O}; %Gốc tọa độ
 \draw (-1,0)node[below]{$-1$}; %Điểm(-1,0)
 \draw (0,1)node[right]{$1$}; %Điểm(0,1)
 \draw[very thick,domain=-2:2] plot(\x,\x+1)node[right]{$y=x+1$};
\end{tikzpicture}
Bạn cần đăng nhập để thấy đính kèm

Tóm lại :
Mã:
\tikz \draw[domain=a:b] plot(\x,{f(\x)});
Ta sẽ vẽ được độ thị hàm số f(x) trong đó x nằm trong đoạn [a;b] .
2. Hàm số :
Hàm sốLatex Tikz
Các phép toán cơ bản+ , - , * , /
Giá trị tuyệt đốiabs(X)
Căn thứcsqrt(X)
Hàm lượng giácsin(X), cos(X), tan(X)
Nghịch đảo hàm lượng giácasin(X), acos(X), atan(X)
\[ e^x \]exp(X)
\[ x^y \]pow(X,Y)
Logaritln(X), log10(X), log2(X)
X!factorial(x)
Min , Maxmin(X1,…,Xn) , max(X1,…,Xn)
Ceil, floorceil(X) , floor(x)
Ngoài ra, epsilon là e, tính toán chu vi và diện tích đường tròn sử dụng pi.
Chú ý 1:
Mã:
\tikz \draw[domain=0:2.5] plot(\x,sqrt(\x));
Khi đó phần này (\x,sqrt(\x)) sẽ gây ra lỗi.
Là vì bên trong dấu ngoặc đơn ( ) bạn không thể tiếp tục đặt dấu ngoặc đơn ( ) để mô tả trong Tikz.
Cách giải quyết là :
Mã:
\tikz \draw[domain=0:2.5] plot(\x,{sqrt(\x)});
Chú ý 2:
Các hàm lượng giác thì chúng đều sử dụng số đo là độ.
Mã:
\tikz \draw(pi,{sin(pi)})node{A};
Khi đó điểm A sẽ hiển thị là điểm :

\[ \pi , \sin{\pi}^o \]
Để chuyển sang radian cách giải quyết là viết như sau : (pi,{sin(pi r)})
 
Top