我反复遇到以下问题:
我有一些代码tkz-euclide
可以正常工作。例如,它可以是
\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){M}
\tkzDefPoint(1,0){A}
\tkzDefPoint(2,1){B}
\tkzInterLC(A,B)(M,A)\tkzGetFirstPoint{C}
\tkzDefTriangleCenter[circum](A,M,C)\tkzGetPoint{U}
\tkzDrawPoints(A,B,C,M,U)
\tkzLabelPoints(A,B,C,M,U)
\tkzDrawCircle(U,A)
\tkzDrawCircle(M,A)
\end{tikzpicture}
\end{document}
\tkzGetFirstPoint{C}
请注意,如果将 替换为,则会给出不同的(错误)图像
\tkzGetSecondPoint{C}
。 (在后一种情况下,C
应该与 相同A
,这将返回错误。实际上,由于舍入效应, 似乎C
在 附近A
,这导致 的外接圆非常大(A,M,C)
。
但时不时地(可能在某个软件包更新后)FirstPoint
和SecondPoint
会互换其含义,这样我就必须调整我的几十张图片。
如何避免这种情况?我知道还有一种替代构造,即通过 反射到A
的垂直线。但这要复杂得多。AB
M
答案1
使用版本 4.03 和 4.05
\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){M}
\tkzDefPoint(1,0){A}
\tkzDefPoint(2,1){B}
\tkzInterLC[common=A](A,B)(M,A)\tkzGetFirstPoint{C}
\tkzDefTriangleCenter[circum](A,M,C)\tkzGetPoint{U}
\tkzDrawPoints(A,B,C,M,U)
\tkzDrawCircles(U,A M,A)
\tkzLabelPoints(A,B,C,M,U)
\end{tikzpicture}
\end{document}
我提高了使用(线-圆)(圆-圆)和(切线-圆)选择交点的可能性。
4.03 版本仍然存在一些缺陷,这就是为什么我尝试找到在所有情况下选择点的正确方法。
线圆:你有几种可能
- 没有共同点:我创建了一个测试(“newif ...”)来查看交集是否为空。
- 只有一点:选择没问题。
- 这条线穿过中心。您可以使用选项
near
。tkzFirstPoint
分配给最接近定义该线的第一个点的点。这里是第一个点,A
但如果您愿意,您可以写(B,A)
。 - 两个点,但您知道一个点(此处
A
)这就是该common
点。自动将交点的第二个点分配给tkzFirstPoint
。 - 一般情况:宏将角度
(tkzFirstPoint,tkzSecondPoint,O)
和(tkzSecondPoint, tkzFirstPoint,O)
与O
圆心进行比较。最小角度决定tkzFirstPoint
。实际上,其中一个角度是逆时针的,另一个是顺时针的。我将在接下来的几天内完成新版本 4.05,其中包含更多解释和示例以及仅关于交叉点以及如何测试以避免错误的小文档。