如何根据给定的长度比定义两点之间的一个点?

如何根据给定的长度比定义两点之间的一个点?

我有点A(0,0)和,我想要一个长度为和位于同一条线上的B(3, 4)点。如何做到这一点?4/6AB

答案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}

在此处输入图片描述

相关内容