% Purpose: Plot 1 variable funtion % Author: Phu T. Phan % Date: 2010 November 15 % License: LPPL % Mục đích: Vẽ đồ thị hàm số 1 biến % Tác giả: Phan Tấn Phú % Ngày: 15 tháng 11 năm 2010 % Giấy phép: LPPL % ---------- Định nghĩa các hàm lượng giác, mũ, logarit % ---------- Define trigonometric, exponential, logarithmic funtion numeric Pi,E; Pi:= 3.1416; E:= 2.7183; u:=.7cm; mark_size:=.1; xinc:=.01; vardef sin(expr x) = sind(x/Pi*180) enddef; vardef cos(expr x) = cosd(x/Pi*180) enddef; vardef tan(expr x) = sin(x)/cos(x) enddef; vardef exp(expr x) = mexp(x*256) enddef; vardef ln(expr x) = mlog(x)/256 enddef; % --------- Vẽ lưới toạ độ % --------- Draw grid def grid(expr xmin, xmax, ymin, ymax)= drawoptions(withpen pencircle scaled .1pt withcolor .4white); for i=xmin upto xmax: draw u*(i,ymin)--u*(i,ymax); endfor; for i=ymin upto ymax: draw u*(xmin,i)--u*(xmax,i); endfor; enddef; % ----------- Vẽ các trục Ox, Oy % ----------- Draw Ox, Oy axis def axes(expr xmin, xmax, ymin, ymax)= drawoptions(withpen pencircle); drawarrow u*(xmin,0)--u*(xmax,0); drawarrow u*(0,ymin)--u*(0,ymax); label.top(btex $y$ etex,u*(0,ymax)); label.rt(btex $x$ etex,u*(xmax,0)); label.urt(btex $O$ etex,u*(0,0)); enddef; % ----------- Điền các số chia đơn vị % ----------- Unit labelling def unit_tick(expr xmin, xmax, ymin, ymax)= for i=xmin upto xmax: label.llft(decimal(i), u*(1.25i,0)) scaled .8; endfor; for i=ymin upto ymax: label.llft(decimal(i), u*(0,i)); endfor; enddef; % ------------ Vẽ các vạch chia đơn vị % ------------ Unit ticking def tick(expr xmin, xmax, ymin, ymax)= drawoptions(withpen pencircle scaled .2pt); for i=(xmin+1) upto (xmax-1): draw u*(i,-mark_size)--u*(i,mark_size); endfor; for i=(ymin+1) upto (ymax-1): draw u*(-mark_size,i)--u*(mark_size,i); endfor; enddef; % ----------- Tạo đường cong từ biểu thức hàm % ----------- Generate path from expression of funtion def curve(suffix f)(expr xmin, xmax) = ( (xmin,f(xmin))*u for x=xmin+xinc step xinc until xmax: .. (x,f(x))*u endfor ) enddef; % ----------- Vẽ đường cong từ biểu thức hàm % ----------- Draw path from expression of funtion def mplot(suffix f)(expr xmin, xmax) = drawoptions(withpen pencircle); draw ( (xmin,f(xmin))*u for x=xmin+xinc step xinc until xmax: .. (x,f(x))*u endfor ) enddef; % ------ Kết thúc các định nghĩa % ------ End of definitions