我想使用 calc 库和 let... in... 命令定义直线 AB 上的点 C,使得 AC=k。这不起作用,为什么?是否存在单位问题(C 似乎非常接近 A)?我尝试了 scalar() 函数(pgfmanual 3.0.1A,p925),但没有帮助。
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate[label=above left:$A$](A) at(-2,-1);
\coordinate[label=above right:$B$](B) at (2.5,1);
\pgfmathsetmacro\k{3.0}
\path
let \p1=($(B)-(A)$),
\n1={veclen(\x1,\y1)}
in coordinate[label=below:$C$] (C) at ($(A)!{\k/\n1}!(B)$);
\foreach \p in {A,B,C}
\fill (\p) circle (1.5pt);
\end{tikzpicture}
\end{document}
谢谢你!
答案1
我怀疑您有以下情况:
(添加虚线是为了更好地查看坐标是否一致)
对于上述结果,您应该知道,\n1 以点为单位(在您的例子中是 140.1146pt)。因此,您首先需要使两个变量具有相同的长度单位,然后在计算位置时C
考虑该数字必须是标量:
($(A)!<scalar>!(B)$)
您可以使用以下方式获得上图:
\documentclass[border=3.141592]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate[label=above left:$A$](A) at (-2.5,-1);
\coordinate[label=above right:$B$](B) at ( 2.0, 1);
\pgfmathsetmacro\k{3*28.346456693} % <--- observe conversion of units
\path
let \p1=($(B)-(A)$),
\n1={veclen(\x1,\y1)}
in coordinate[label=below:$C$] (C) at ($(A)!scalar(\k/\n1)!(B)$); % <--- observe use of "scalar" option
\foreach \p in {A,B,C}
\fill (\p) circle (1.5pt);
\draw[densely dashed, ultra thin] (A) -- (B); % added
\end{tikzpicture}
\end{document}
或
\documentclass[border=3.141592]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate[label=above left:$A$](A) at (-2.5,-1);
\coordinate[label=above right:$B$](B) at ( 2.0, 1);
\pgfmathsetmacro\k{3}
\path
let \p1=($(B)-(A)$),
\n1={veclen(\x1,\y1)}
in coordinate[label=below:$C$] (C) at ($(A)!scalar(28.346456693*\k/\n1)!(B)$); % <--- observe conversion of units and scalar option
\foreach \p in {A,B,C}
\fill (\p) circle (1.5pt);
\draw[densely dashed, ultra thin] (A) -- (B);
\end{tikzpicture}
\end{document}