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

Các câu lệnh thường dùng trong mp-geom2d

Viết các câu lệnh này vào macro của Unikey, Script của TeXWorks hoặc vào Tag User của TeXMaker, thậm chi vào macro của Nodepad++ để gọi vào TeXEditor.

\documentclass[border=5mm,12pt]{standalone}
\usepackage{unicode-math}
\setmathfont[Extension =.otf,BoldFont = XITSMath-Bold]{XITSMath-Regular}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
input geom2d;

beginfig(1);

% Viết nội dung vào đây

%Thiết lập khung hiển thị
Window(-1,-4,12,10);
FrameMinMax(0, 12, 0, 10, 1, 1);
drawoptions(withcolor LightGrey);
FrameGrid;
endfig;
\end{mplibcode}
\end{document}


drawoptions(withpen pencircle scaled 1pt withcolor black);
A = Point(5,7); 
B = Point(1,2); 
C = Point(7,2);
gddMark.top "A"; gddMark.llft "B"; gddMark.lrt "C" ;
ABC = Triangle(A,B,C); gddDraw ABC;
AB = Line(A, B); AC =  Line(A, C); BC = Line(B, C); 
 
dtrngtiep_ = CircumscribedCircle(ABC); %gddDraw dtrngtiep_;
tamngtiep_ = Center(dtrngtiep_); %gddMark.lft "tamngt_";
R = Radius(dtrngtiep_);
Axtd = CentralSymmetry(A,tamngtiep_); %gddMark.bot "Axtd";
 
 
tructam_= Orthocenter(ABC); %gddMark.rt "tructam_"; 
Atructam_= Line(A, tructam_); 
cdcA = LinesIntersection(BC,Atructam_); %gddMark.bot "cdcA";
 
trongtam_ = IsoBarycenter(A,B,C); %gddMark.rt "trongtam_"; 
Atrongtam_ = Line(A, trongtam_); 
trdBC = LinesIntersection(BC,Atrongtam_); %gddMark.bot "trdBC";
%trdbc = MidPoint(B,C); %gddMark.bot "trdbc";
 
dtrntieP_ = InscribedCircle(ABC); %gddDraw dtrnt_;
tamntiep_ = Center(dtrntiep_); %gddMark.bot "tamntiep";
cpgtA = LinesIntersection(Line(A,tamntiep_),BC); 
dpgtA = AngleBisector(B,A,C);

 
 
gddDraw OrthoSign(A,H,C,0.5); % vẽ dấu góc vuông
B_AM = ParallelLine(Line(A,M),B); gddDraw B_AM;
B_AM = PerpendicularLine(Line(A,M),B); gddDraw B_AM;
 
T = LineCircleIntersection(Line(M,H),dtrngt,1); gddMark.lft "T";
T = LinesIntersection(Line(A,B),Line(C,D)); gddMark.lft "T";
T = CirclesIntersection(c_1,c_2); gddMark.lft "T";
 
%Tiếp tuyến kẻ từ 1 diểm nằm ngoài đường tròn
pointA ; dtrC ; 
tamdtrC = Center(dtrC);
tiepdiemm  = CirclesIntersection(dtrC, CircleD(pointA,tamdtrC));
tiepdiemh = CirclesIntersection(CircleD(pointA,tamdtrC),dtrC);
gddDraw Segment(pointA,tiepdiemm);
gddDraw Segment(pointA,tiepdiemh);
 
 
    
% Khai báo hệ trục tọa độ ngay sau beginfig và trước endfig
Frame(9,9,4,5,0.8,0.8);
Axis;
	gddBegin;
	Axis;
	Graduations;
	Units(1);
	nội dung
	gddEnd;


Hàm invert.mp

% Hàm tính ảnh đường tròn qua phép nghịch đảo
vardef invert_circle(expr input_circle, inversion_circle) =
    save cen, r, xcen, ycen, X, Y, Z, iX, iY, iZ;
    cen = Center(input_circle);
    r = Radius(input_circle);
    xcen = Xcoordinate(cen);
    ycen = Ycoordinate(cen);
    
    % Chọn 3 điểm trên đường tròn (cách đều 120 độ)
    X = Point(xcen + r*cos(0), ycen + r*sin(0));
    Y = Point(xcen + r*cos(120), ycen + r*sin(120));
    Z = Point(xcen + r*cos(240), ycen + r*sin(240));
    
    % Tính ảnh của 3 điểm qua phép nghịch đảo
    iX = Inverse(X, inversion_circle);
    iY = Inverse(Y, inversion_circle);
    iZ = Inverse(Z, inversion_circle);
    
    % Tạo đường tròn mới từ 3 điểm ảnh
    CircleThreePoints(iX, iY, iZ)

 

Không có nhận xét nào:

Đăng nhận xét