有没有什么方法可以仅知道直径上的两个点来画圆?
这是我正在尝试解决的完整问题:有一个线段 MN(但是点 M 和 N 被计算为其他线的交点,所以我不知道它们的坐标)并且我想构造泰勒斯圆(以找到一些直角)。
我找到了一些绘制部分圆周的代码,所以我对其进行了修改
\coordinate (S_MN) at ($(M)!.5!(N)$);
\draw[red] (S_MN) let \p1 = ($(N)-(S_MN)$) in ++({veclen(\x1,\y1)},0) arc (0:360:({veclen(\x1,\y1)}););
(我正在使用该calc
库),但编译时遇到错误。
!package Tikz error: + or - expected. See the tikz documentation...
(是的,不幸的是,我承认我对我使用过的 TikZ 构造了解不多。)
$(M) - (N)$
我也尝试过通过(我曾在某处见过)来计算半径,但是没有成功。
- - 编辑 - -
(...)
但我想我已经找到问题了——我试图从文档中删除软件包并检查是否存在问题
-> 一旦\usepackage[czech]{babel}
包被注释,一切都正常运行
\documentclass[12pt,a4paper]{report}
\usepackage[czech]{babel}
\usepackage[cp1250]{inputenc}
\usepackage{graphicx}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{epstopdf}
\usepackage{tikz}
\usetikzlibrary{calc}
\pgfmathsetseed{\pdfuniformdeviate 10000000}
\begin{document}
\begin{tikzpicture}
\draw[style=help lines] (0,0) grid[step=1cm] (3,3);
\coordinate (M) at (2,1);
\foreach \x in {1,...,5}{
\node (N) at ({random(0,3)},{random(0,3)}) {here};
\coordinate (S_MN) at ($(M)!.5!(N)$);
\draw[red] (S_MN)
let \p1 = ($(N)-(M)$),\n1 = {0.5*veclen(\x1,\y1)} in ++(\n1,0) arc (0:360:\n1);
}
\end{tikzpicture}
\end{document}
编辑 2:我曾将 percusse 的构造与 cjorssen 的“更新”结合使用,效果非常好。但现在我意识到一个问题 - 我如何找到与我在第一篇帖子中提到的其他线的交点?(摘要:我按照你的方式画了一个圆。还有一条线,比如说 AB,它在两点与圆相交。我如何检测它们来绘制我使用泰勒斯圆的直角?提前致谢
答案1
使用 tkz-euclide
\documentclass{scrartcl}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(2,1){A}
\tkzDefPoint(7,3){B}
\tkzDrawCircle[diameter,fill=yellow!50](A,B)
\tkzDefMidPoint(A,B) \tkzGetPoint{O}
\tkzCalcLength[cm](O,B) \tkzGetLength{rAB}
\tkzGetRandPointOn[circle = center O radius \rAB cm]{C}
\tkzDrawPolygon[fill=red!40](A,B,C)
\tkzLabelPoints(A,B,C,O)
\tkzMarkRightAngle(A,C,B)
\end{tikzpicture}
\end{document}
答案2
我用一个随机节点替换了其中一个点。您可以使用寄存器\n
进行计算并将其用于路径,也可以使用圆代替圆弧,但我保留了圆弧,这样您就可以区分您自己的代码和我的代码 :)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pgfmathsetseed{\pdfuniformdeviate 10000000}
\begin{document}
\begin{tikzpicture}
\draw[style=help lines] (0,0) grid[step=1cm] (3,3);
\coordinate (M) at (2,1);
\foreach \x in {1,...,5}{
\node (N) at ({random(0,3)},{random(0,3)}) {here};
\coordinate (S_MN) at ($(M)!.5!(N)$);
\draw[red] (S_MN) let \p1 = ($(N)-(M)$),\n1 = {0.5*veclen(\x1,\y1)} in ++(\n1,0) arc (0:360:\n1);
}
\end{tikzpicture}
\end{document}
M
在坐标上(2,1)
,但每次迭代时N
都会显示为文本。here
答案3
当 babel 与捷克语一起使用时,它会-
激活。这会导致 tikzcalc
库无法正确解析坐标。这就是您收到错误消息的原因
!package Tikz error: + or - expected. See the tikz documentation...
因为 tikz在寻找带有 catcode 时找到了带有-
catcode 13
( ) 的。\active
-
12
\shorthandoff{-}
一种解决方法是在 之前\begin{tikzpicture}
和\shorthandon{-}
之后添加\end{tikzpicture}
。但请注意,您将无法使用-
内部相关的 babel 功能tikzpicture
。