我有点A(0,0)
和,我想要一个长度为和位于同一条线上的B(3, 4)
点。如何做到这一点?4/6
AB
答案1
使用 TikZ 及其calc
库,您可以使用语法沿着通过和 的( $ (<name1>)!<value>!(<name1>) $ )
线段找到一个点。在下面的例子中,表示距离和连接线段三分之二处的点:(<name1>)
(<name2>)
( $ (a)!0.66666!(b) $ )
(a)
(a)
(b)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw[help lines,gray!40] (0,0) grid (3,4);
\coordinate (a) at (0,0);
\coordinate (b) at (3,4);
\node[label={left:$A$}] at (a) {};
\node[label={left:$B$}] at (b) {};
\draw (a) -- (b);
\node[label={left:$C$}] at ( $ (a)!0.66666!(b) $ ) (c) {};
\foreach \Nombre in {a,b,c}
\node[circle,inner sep=1.5pt,fill=black] at (\Nombre) {};
\end{tikzpicture}
\end{document}
作为安德鲁·斯旺提及他的评论,也可以让 PGF 进行十进制计算并使用
( $ (a)!4/6!(b) $ )
代替
( $ (a)!0.66666!(b) $ )
答案2
您tkz-euclide
可以使用重心坐标,它可用于将点放置在其他点之间。点页位于两点之间的线上A和乙可以写成(a1 + a2)页= 1A+ 2乙,且(a 1 , a 2)为重心坐标页。
位于 2/3 处的点A和乙可以通过向量和找到A+(2/3)(乙-A)=(1/3)A+(2/3)乙由此可见,该点的重心坐标为 (1,2),这就是为什么
\tkzDefBarycentricPoint(A=1,B=2)
在下面的代码中使用。如果您希望将点放置在两点之间的 7/10 处,则可以使用\tkzDefBarycentricPoint(A=3,B=7)
。
这只能用于放置点之间两个定义的点,而使用 Gonzalo 答案中的 TikZ 解决方案,您可以例如说\node[label={left:$C$}] at ( $ (a)!2!(b) $ ) (c) {};
将c
距离 2ab 的位置放置a
在通过 的线上b
,或者甚至\node[label={left:$C$}] at ( $ (a)!-1!(b) $ ) (c) {};
将其放置a
在距离 ab 的位置,方向与 相对b
。
\documentclass[border=3mm,tikz]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmax=3,ymax=4]
\tkzGrid
\tkzDefPoint(0,0){A}
\tkzDefPoint(3,4){B}
\tkzDefBarycentricPoint(A=1,B=2)
\tkzGetPoint{C}
\tkzDrawPoints(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
\end{document}
答案3
无需使用或任何额外的库,您也可以使用选项(其中是线段上的相对位置,这里是 2/3)calc
将节点直接放置在路径上。pos=<pos>
<pos>
MWE(基于 Gonzalo Medina 的代码):
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[help lines,gray!40] (0,0) grid (3,4);
\coordinate (a) at (0,0);
\coordinate (b) at (3,4);
\node[label={left:$A$}] at (a) {};
\node[label={left:$B$}] at (b) {};
\draw (a) -- (b) node[label={left:$C$},pos=2/3] (c) {};
\foreach \Nombre in {a,b,c}
\node[circle,inner sep=1.5pt,fill=black] at (\Nombre) {};
\end{tikzpicture}
\end{document}
隔离线才是最重要的。请注意,即使您不想在 A 和 B 之间看到一条可见的线,或者您想要一条带有特定参数的线,也可以使用这个。只需用 替换,\draw
带\path
或不带其他参数即可。
答案4
一个干净、幸运的解决方案。
选项 - ∞ + 1
在 Christoph 的答案中使用精确因子2 3 div
代替。0.6666
\documentclass[pstricks,border=24pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](3,4)
\pstGeonode[PosAngle={-135,45}]{A}(3,4){B}
\psLNode(A)(B){2 3 div}{t}
\pstGeonode(t){C}
\end{pspicture}
\end{document}
选项1
\documentclass[pstricks,border=24pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](3,4)
\pstGeonode[PosAngle={-135,45,0}]{A}(3,4){B}([Xnodesep=2]{B}A){C}
\end{pspicture}
\end{document}
以及使用 PSTricks 的肮脏解决方案。
选项 0
\documentclass[pstricks,border=24pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](3,4)
\pstGeonode[PosAngle={-135,45,0}]{A}(3,4){B}([Ynodesep=1.3333]{A}B){C}
\end{pspicture}
\end{document}
选项1
\documentclass[pstricks,border=24pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](3,4)
\pstGeonode[PosAngle={-135,45,0}]{A}(3,4){B}([nodesep=3.3333]{B}A){C}
\end{pspicture}
\end{document}
选项 2
\documentclass[pstricks,border=24pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](3,4)
\pstGeonode[PosAngle={-135,45}]{A}(3,4){B}
\nodexn{(A)+.6666(B)-.6666(A)}{t}
\pstGeonode(t){C}
\end{pspicture}
\end{document}
选项 3
\documentclass[pstricks,border=24pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](3,4)
\pstGeonode[PosAngle={-135,45}]{A}(3,4){B}
\pnodes{t}(2,0)(2,4)
\pstInterLL{A}{B}{t0}{t1}{C}
\end{pspicture}
\end{document}