假设一条线与 tkz-euclide 中的一个圆相切

假设一条线与 tkz-euclide 中的一个圆相切
\documentclass[10pt]{article}
\usepackage[a5paper]{geometry}
\usepackage{tkz-euclide}
\usepackage{float}
\usepackage{amsthm,amssymb, amsmath, amsfonts}
\usetikzlibrary{math, arrows, positioning, shapes, fit, calc, quotes, angles}
\begin{document}
\begin{figure}[H]
        \centering
        \begin{tikzpicture}[scale=1]

        \tkzDefPoint(0,0){A}
        \tkzDefPoint(3,0){B}
        \tkzDefPoint(2,4){C}
        \tkzCircumCenter(A,B,C) \tkzGetPoint{O}
        \tkzDefPointWith[linear, K=0.6](C,A) \tkzGetPoint{P}
        \tkzDefPointWith[linear, K=0.3](B,A)\tkzGetPoint{Q}
        \tkzDefMidPoint(B,P) \tkzGetPoint{K}
        \tkzDefMidPoint(C,P) \tkzGetPoint{L}
        \tkzDefMidPoint(Q,P) \tkzGetPoint{M}


        \tkzDrawPolygon(A,B,C)
        \tkzDrawPoints(A,B,C,P,Q,O,K,L,M)
        \tkzDrawSegments(P,Q B,P C,Q)
        \tkzDrawCircle[circum](K,L,M)


        \tkzLabelPoints[below](A,B,O)
        \tkzLabelPoints[above](C,L)
        \tkzLabelPoints[below](Q)
        \tkzLabelPoints[left](P)
        \tkzLabelPoints[above](K)
        \tkzLabelPoints[below left](M)
        \end{tikzpicture}
    \end{figure}
    \end{document}

上述代码为 IMO 2009 的第二道题生成了一个图形。问题是几何练习的作者假设直线 PQ 与圆 KLM 相切。我怎样才能告诉 tkz-euclide 我想要直线 PQ 与圆相切?如果其他问题说我们需要一些线段彼此全等或角度全等怎么办?我怎样才能编写 tkz-euclide 以使这些线段全等?提前致谢!

答案1

有时可以通过从数学问题的结论回溯来进行绘图。

在绘图中这个几何问题A,我们从圆上的一个点开始(O,R),然后选择PQ使得OP=OQ;接下来取点B和分别作为圆与和C的交点。AQAP

在此处输入图片描述

// http://asymptote.ualberta.ca/
// 2009 IMO Problems/Problem 2
// https://artofproblemsolving.com/wiki/index.php/2009_IMO_Problems/Problem_2

size(8cm);
import geometry;
real R=3,t=2.2;
pair O=(0,0),P=t*dir(90),Q=t*dir(135);
pair A=R*dir(120);
path cir=circle(O,R);
pair B=intersectionpoint(A--Q+5(Q-A),cir);
pair C=intersectionpoint(A--P+5(P-A),cir);
pair K=(B+P)/2, L=(C+Q)/2, M=(P+Q)/2;
pair J=circumcenter(K,M,L);
draw(circle(J,abs(J-M)));
draw(A--B--C--cycle);
draw(B--P--Q--C,gray);
draw(O--P^^O--Q,gray+dashed);
draw(cir,orange);
dot("$O$",align=NE,O,orange);
dot("$A$",align=NW,A,Fill(white));
dot("$B$",align=SW,B,Fill(white));
dot("$C$",align=NE,C,Fill(white));
dot("$P$",align=NE,P);
dot("$Q$",align=W,Q);
dot("$K$",align=SW+W,K,red);
dot("$M$",align=N,M,red);
dot("$L$",align=NE,L,red);

shipout(bbox(5mm,invisible));

相关内容