问题:如何以射线的形式延伸角对角线?以及如何获得与线段 BC 的交点?
梅威瑟:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(2,4){A}
\tkzDefPoint(0,0){B}
\tkzDefPoint(4,0){C}
\tkzLabelPoint[above](A){$A$}
\tkzLabelPoint[left](B){$B$}
\tkzLabelPoint[right](C){$C$}
\tkzDrawPolygon(A,B,C)
\tkzDrawBisector[color=blue](B,A,C)
\end{tikzpicture}
\end{document}
答案1
为了进行比较,以下是元帖子展示 Knuth 的有用whatever
符号和声明性方程风格。
\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
% define a distance unit
numeric u; u = 1cm;
% define the arbitrary points
pair A, B, C;
A = (3,4) scaled u;
B = origin;
C = (4,-2) scaled u;
% find the angle bisector point
z1 = whatever[B,C] = whatever * right shifted A rotatedabout(A, 1/2 (angle (C-A) + angle (B-A)));
% find another point somewhere along the bisector ray...
z2 = whatever[A,z1];
y2 = ypart C; % arbitrarily set the y-coordinate of z2 to the same as point C
% now draw some of these things...
drawarrow A -- z2 withcolor 2/3 blue;
draw A--B--C--cycle;
fill fullcircle scaled dotlabeldiam shifted z1 withcolor red;
draw fullcircle scaled dotlabeldiam shifted z1;
% and add the labels
label.top("$A$", A);
label.lft("$B$", B);
label.lrt("$C$", C);
endfig;
\end{mplibcode}
\end{document}
这可能有助于解开角平分线:
z1 = whatever[B,C] = whatever * right shifted A rotatedabout(A, 1/2 (angle (C-A) + angle (B-A)));
第一部分
z1 = whatever[B,C]
说“在 B-C 线上的某处定义一个点 z1”。如果您尝试绘制z1
与此点相关的某个东西,您会收到一条错误消息,提示这z1
是一对未知的对。因此,要确定这一点,您需要在方程中添加第二个元素。
z1 = whatever[B,C] = whatever * right;
这定义z1
为直线 B-C 与通过原点的水平线的交点(因为 right
定义为矢量(1,0)
)。这还不是你想要的……
z1 = whatever[B,C] = whatever * right shifted A;
这定义z1
为 B-C 线与通过该点的水平线的交点,A
该点更接近您想要的点。最后:
z1 = whatever[B,C] = whatever * right shifted A
rotatedabout(A, 1/2 (angle (C-A) + angle (B-A)));
定义z1
为直线 B-C 与经过该直线的直线的交点A
,该直线旋转A
到直线 C-A 和 B-A 的角度的平均值。这就是获取角平分点所需要的。
答案2
1. 如何获取积分(称为 C_1)与线段 BC 的交点? (这(第一)部分(更多)是重复的tkz-euclide 中的正交线。
您可以使用 定义一条 BC 上穿过 A 的正交线\tkzDefLine[orthogonal=through A](B,C)
。线上的第二个点可以用\tkzGetPoint{}
和任意名称定义,例如X_1
=> \tkzGetPoint{X_1}
。
交点可以用\tkzInterLL( )( )
和任意名称来定义,例如C_1
=> \tkzGetPoint{C_1}
。因此,\tkzInterLL(C,B)(A,X_1)
您可以使用 计算两条线 CB 和 AX_1 的交点。使用 ,\tkzGetPoint{C_1}
您将获得交点,并将其保存为C_1
。
要绘制和标记点(Point1、Point2、Point3),您可以使用\tkzLabelPoints(Point1,Point2,Point3)
、... 和\tkzDrawPoints(Point1,Point2,Point3)
。
编辑:
2. 如何将角对角线延长为射线形式?
你可以从到 最后\tkzDrawLine[add = 0 and 0.1,color=green](A,tkzPointResult)
一点 画一条线,也就是(这里)末尾。要延长这条线,请用(延长起点或终点) =>添加一些空间A
tkzPointResult
C_1
add = AddStart and AddEnd
\tkzDrawLine[add = 0 and 0.1,color=green](A,tkzPointResult)
参见手册7.5.1 使用 \tkzInCenter 和三个点在第30页。
3.箭头:
如果您喜欢箭头,可以使用:arrows=-triangle 60
或其他三角箭头
\tkzDrawLine[add = 0 and 0.1,color=green,arrows=-triangle 60](A,tkzPointResult)
梅威瑟:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(2,4){A}
\tkzDefPoint(0,0){B}
\tkzDefPoint(4,0){C}
\tkzLabelPoint[above](A){$A$}
\tkzLabelPoint[left](B){$B$}
\tkzLabelPoint[right](C){$C$}
\tkzDrawPolygon(A,B,C)
\tkzDrawBisector[color=blue](B,A,C)
\tkzDefLine[orthogonal=through A](B,C)
\tkzGetPoint{X_1}
%\tkzLabelPoints(X_1)\tkzDrawPoints(X_1)
\tkzInterLL(C,B)(A,X_1)
\tkzGetPoint{C_1}
%\tkzDrawLine[add = 0 and 0.1,color=green](A,tkzPointResult)
\tkzDrawLine[add = 0 and 0.1,color=green,arrows=-triangle 60](A,tkzPointResult)
\tkzDrawLine[add = 0.3 and 0.1,color=orange](B,tkzPointResult)
\tkzDrawPoints(C_1)\tkzLabelPoints(C_1)
\end{tikzpicture}
\end{document}