给定下面的点 A、B 和 P,我想画一条与 AB 平行且通过 P 的线(或者如果 P 不在 x 轴上的 A 和 B 之间,则仅指向 P,如本例所示)。换句话说,就是将 AB 向上/向下移动,使移动后的线与 P 共线。
期望输出(所示的点 R 仅用于说明):
以下是我目前所拥有的。本质上,它是将 P 垂直投影到 AB 上(称为投影 R),然后使用它tikz.calc
来获取红线的起点和终点。我想知道是否有一种更简单的方法,理想情况下我可以不用设置虚拟点 Q 和 R?类似的问题是这里但在该问题中,P 必须垂直位于 A 或 B 的上方/下方。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[dot/.style={circle,inner sep=1pt,fill,label={#1},name=#1}]
% define the points A, B, P
\draw[dashed] (0,0) node[dot=A]{}
-- (3,2) node[dot=B]{}
(-1,0.5) node[dot=P]{};
% find vertical projection of P on AB as R
\path (P) +(0,-0.1) coordinate(Q); %0.1 is an arbitary value
\node[dot=R] at (intersection of A--B and P--Q){}; %make R a coordinate in actual use
\draw[red] ($(A)+(P)-(R)$) -- ($(B)+(P)-(R)$);
\end{tikzpicture}
\end{document}
答案1
我认为您已经给出了最简单直接的方法。我只是清理了代码。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[dot/.style={circle,inner sep=1pt,fill=#1}]
\path
(0,0) coordinate (A) node[dot]{} node[below]{$A$}
(3,2) coordinate (B) node[dot]{} node[right]{$B$}
(-1,.5,0) coordinate (P) node[dot]{} node[above]{$P$}
+(90:1) coordinate (Pt)
(intersection of A--B and P--Pt) coordinate (R)
($(P)+(A)-(R)$) coordinate (Pa) node[dot=magenta]{} node[above left]{$P_a$}
($(P)+(B)-(R)$) coordinate (Pb) node[dot=magenta]{} node[above]{$P_b$}
;
\draw (A)--(B);
\draw[magenta] (Pa)--(Pb);
\end{tikzpicture}
\end{document}
答案2
通过使用极坐标,程序变得简单而简短:
\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{angles, % for show angle
calc}
\begin{document}
\begin{tikzpicture}[
dot/.style = {circle,inner sep=1pt,fill,label={[text=black]#1}, node contents={}}
]
\draw[red] (0,0) node[dot=$P$] -- ++ (30:1) node (Pa) [dot=$P_a$] -- ++ (30:3) node (Pb) [dot=$P_b$];
\draw[dashed] ($(Pa)!1cm!270:(Pb)$) node (A) [dot=$A$] -- ++ (30:4) node[dot=$B$];
% for showing projection A on P -- Pb
\path[draw=gray, densely dashed, very thin] (Pa) -- (A)
pic [draw, angle radius=3mm] {right angle = Pb--Pa--A};
\end{tikzpicture}
\end{document}
答案3
这个想法和你的想法类似渐近线。
size(200);
pair A=(0,0),B=(3,2);
pair P=(-1,0.5);
pair R=extension(A,B,P,P+(0,1));
draw(A--B,dashed);
draw(shift(P-R)*(A--B),red);
dot("$P$",P,N);
dot("$A$",A,N);
dot("$B$",B,N);
dot("$R$",R,N);
输出就像你的第二张图片。
答案4
使用tzplot
包裹:
\documentclass[tikz]{standalone}
\usepackage{tzplot}
\begin{document}
\begin{tikzpicture}
\tzhelplines(-1,-1)(4,3)
\tzcoors*(0,0)(A){$A$}(3,2)(B){$B$}(-1,0.5)(P){$P$};
\tzline[dashed](A)(B)
% get a slope and draw a line passing through (P)
\tzpointangle(A)(B){\myAng}
\tzLFn[red](P){tan(\myAng)}[0:3]
\end{tikzpicture}
\end{document}