如何绘制与三角形内部的 BC 平行的内切圆的切线?此外,如何找到 $I_AX$ 和圆的另一个交点(基本上是最南端的点)?我的进度如下所示,任何帮助都将不胜感激。
\begin{center}
\begin{asy}
size(9cm);
pair A=(2,8), B=(0,0), C=(10,0);
pair I = incenter(A, B, C);
pair D = foot(I, B, C);
draw(B--C,deepcyan);
draw(incircle(A,B,C));
draw(excircle(C,B,A), dashed);
draw(I--D,deepgreen);
label("$A$", (2,8),N);
label("$B$", B, dir(180));
label("$C$", C, NE);
label("$D$", D, dir(250));
label("$I$", I, dir(330));
triangle t=triangle(A,B,C);
point I_A = excenter(t.BC);
draw(A--I_A,deepcyan);
label("$I_A$",I_A,S);
pair X = foot(I_A, C,B);
label("$X$", X, dir(45));
draw(X--I_A,deepgreen);
draw(A--B+1.1*(B-A),deepcyan);
draw(A--C+0.8*(C-A),deepcyan);
pair K = foot(A,B,C);
draw(K--A,royalblue);
label("$K$", K, dir(250));
label("$M$", (2,4), 1.2*dir(240));
draw((2,4)--X,deepgreen);
draw((2,4)--I_A,royalblue);
draw(A--X);
dot(A);
dot(B);
dot(C);
dot(D);
dot(I);
dot(K);
dot(I_A);
dot(X);
dot((2,4));
\end{asy}
\end{center}
答案1
清楚的元帖子在这种构造方面也相当出色。内置的几何宏非常少,如 Asymptote 的,但使用下面我展示的和incircle
等工具不难找到简单的构造。我已包含一些我希望有用的评论。whatever
intersectionpoint
这已被包裹起来,luamplib
因此您可以编译它以lualatex
直接生成 PDF。
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
pair A, B, C, D, E, F, G, I, J, K, M, N, P;
% define the three triangle points
A = (40, 160);
B = origin;
C = (200, 0);
% incenter is the intersection of two internal angle bisectors
I = whatever [A, A + unitvector(B-A) + unitvector(C-A)]
= whatever [B, B + unitvector(A-B) + unitvector(C-B)];
% outcenters are the intersection of one internal angle bisector and one external
J = whatever [A, A + unitvector(B-A) + unitvector(C-A)]
= whatever [B, B - unitvector(A-B) + unitvector(C-B)];
% this is the standard idiom to find closest point on
% a line to a point not on the line
D = whatever [B, C]; I - D = whatever * (B-C) rotated 90;
E = whatever [B, C]; J - E = whatever * (B-C) rotated 90;
path incircle, excircle;
incircle = fullcircle scaled 2 abs (I-D) shifted I;
excircle = fullcircle scaled 2 abs (J-E) shifted J;
draw incircle;
draw excircle;
% these were the first two points the OP wanted
% "intersectionpoint" gives the pair were two lines intersect
F = (A--B) intersectionpoint ((B--C) rotatedabout(I, 180));
G = (A--C) intersectionpoint ((B--C) rotatedabout(I, 180));
N = D rotatedabout(I, 180);
% same idiom as above to find the pedal point of A
K = whatever [B, C]; A - K = whatever * (B-C) rotated 90;
% another way to find an intersection points
% even when you need to extend the lines to get the intersection
% but will not work if the four points are co-linear
M = whatever [E, I] = whatever [D, J];
% this is the second point the OP wanted
P = E rotatedabout(J, 180);
% now draw some of the lines
draw A -- J withcolor 2/3[blue, green];
draw E -- M -- J withcolor 1/2 red;
% mark right angle...
draw unitsquare scaled 4 rotated angle (A-K) shifted K withcolor 1/2 white;
draw A--K withcolor 1/2 white;
draw A--P withcolor 1/2 white;
draw D--N withcolor 1/2[blue, white];
draw E--P withcolor 1/2[blue, white];
draw A -- 2.4[A,B];
draw A -- 2.1[A,C];
draw B--C;
draw F--G;
% and label the points
interim dotlabeldiam := 2;
dotlabel.top ("$A$", A);
dotlabel.ulft("$B$", B);
dotlabel.urt ("$C$", C);
dotlabel.urt ("$D$", D);
dotlabel.urt ("$E$", E);
dotlabel.ulft("$F$", F);
dotlabel.urt ("$G$", G);
dotlabel.urt ("$I$", I);
dotlabel.urt ("$J_A$", J);
dotlabel.bot ("$K$", K);
dotlabel.lft ("$M$", M);
dotlabel.bot ("$P$", P);
endfig;
\end{mplibcode}
\end{document}
笔记
whatever
我在这里的几个地方都用过——这是 MP 的“声明式”方程的一个非常有用的功能。基本上whatever
代表您需要的任何值;MP 的方程引擎将计算出所需的准确值。whatever
当然,每个值都不同。如果您需要知道实际使用的值,只需whatever
用新的未定义数字变量替换,MP 就会将其设置为所需的值。A--B
给出一个path
从 A 到 B 的 向量。A-B
给出一个pair
表示从 B 开始到 A 的向量。“中介”语法会找到从一个点到另一个点之间的某个点。因此
1/2[A, B]
是中点,而1[A, B]
是 B,并且2[A, B]
在同一方向上比 B 稍远一点...
答案2
您的代码无法编译。似乎混合了geometry.asy
和一些私有命令(例如foot
三个pair
)。此外比+更dot("$A$",A,N)
短dot(A)
label("$A$",N)
我重写了它(尽管代码并不完美),geometry.asy
它提供了大量的二维几何函数。
size(10cm);
import geometry;
point A=(2,8), B=(0,0), C=(10,0);
triangle tABC=triangle(A,B,C);
pair I = incenter(A, B, C);
pair D = intouch(tABC.BC);
draw(segment(B,C),deepcyan);
draw(incircle(A,B,C));
draw(excircle(C,B,A), dashed);
draw(segment(I,D),deepgreen);
point I_A = excenter(tABC.BC);
draw(segment(A,I_A),deepcyan);
point X = projection(line(B,C))*I_A;
draw(X--I_A,deepgreen);
draw(line(A,B),deepcyan);
draw(line(A,C),deepcyan);
pair K = foot(tABC.VA);
draw(segment(K,A),royalblue);
point M=intersectionpoint(line(I_A,D),line(X,I));
draw(line(M,X),deepgreen);
draw(line(M,I_A),royalblue);
// first way intersection of the lines XI_A and excircle
//pair[] T=intersectionpoints(line(X,I_A),excircle(C,B,A));
//point pN= T[0]; // could be T[1] it is possible to make a test with B to choose the right point
//second way : symmetry of center I_A applied to M
//point pN=I_A+(I_A-X);
//second way with geometry
point pN=scale(-1,I_A)*X;
draw(line(X,pN));
// for F and G many possibilities (see N)
line d=parallel(I+(I-D),line(B,C));
draw(d);
dot(I+(I-D),red);
point F=intersectionpoint(d,line(A,C));
point G=intersectionpoint(d,line(A,B));
dot("$B$", B, dir(180));
dot("$A$", (2,8),N);
dot("$C$", C, NE);
dot("$D$", D, dir(250));
dot("$I$", I, dir(330));
dot("$X$", X, dir(45));
dot("$I_A$",I_A,S);
dot("$K$", K, dir(250));
dot("$M$", (2,4), 1.2*dir(240));
dot("$F$",F,NE);
dot("$G$",G,NW);
dot("$N$",pN,SW);
这里我使用triangle
结构(来自geometry
文档)
- 如果
t
是三角形,t.AB
是边(t.BC
等),t.VA
是顶点 incenter(triangle)
:返回三角形内切圆的中心intouch(side)
:返回边side与边所引用的内切圆的接触点。
和 Metapost 解决方案一样,计算所需点的坐标并不困难(N
在我的图片中)。您有许多解决方案:圆和线的交点、旋转、向量加法、系数等于 -1 的缩放。