![给定长度的两点线的垂直线](https://linux22.com/image/253898/%E7%BB%99%E5%AE%9A%E9%95%BF%E5%BA%A6%E7%9A%84%E4%B8%A4%E7%82%B9%E7%BA%BF%E7%9A%84%E5%9E%82%E7%9B%B4%E7%BA%BF.png)
我有两个点 A 和 B,我将由 A 和 B 组成的线称为 LAB:ax+by+c=0,我想从点 B 开始绘制一条垂直于 LAB 且长度为 len 的线段,使得该线段位于直线 LAB 的正侧,即半空间 ax+by+c>0。在 Tikz 中如何实现?
我设法在 Matlab 中计算并绘制了这样的线,以下是代码。这可能有助于理解我的意思:
%% input data
A.x = 2;
A.y = 2;
B.x = 6;
B.y = 5;
d = 2.5; % the length len
P = B; % selected end point
%% calculation
v.x = B.x - A.x;
v.y = B.y - A.y;
X = v.y*d/sqrt(1+v.x^2);
Y = -v.x/v.y*X;
% in one side of the line LAB
C.x = X + P.x;
C.y = Y + P.y;
% in another side of the line LAB
D.x = P.x - X;
D.y = P.y - Y;
%% visualization
figure(1);hold on; axis equal;
plot(A.x,A.y,'ro',B.x,B.y,'bo',C.x,C.y,'go',D.x,D.y,'yo');
plot([A.x B.x],[A.y B.y],'-k');
plot([B.x C.x],[B.y C.y],'-k');
plot([B.x D.x],[B.y D.y],'-k');
答案1
我不太确定我是否理解了你试图做的事情,但也许这个calc
库可以帮上忙。要绘制一条从点开始的线,该线垂直于点和(B)
点之间的线,给定一个,你可以使用语法(A)
(B)
<length>
\draw (B) -- ($(B)!<length>!-90:(A)$);
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[dot/.style={circle,inner sep=1pt,fill,label={#1},name=#1}]
\node [dot=A] at (0,0) {};
\node [dot=B] at (3,1) {};
\draw (A) -- (B);
\draw (B) -- ($(B)!1cm!-90:(A)$);
\end{tikzpicture}
\end{document}
答案2
只是为了和 PSTricks 一起玩。
\documentclass[pstricks,border=12pt,12pt]{standalone}
\usepackage{pst-eucl}
\def\y{2*x-2}
\begin{document}
\begin{pspicture}(3,3)
\pstGeonode[CurveType=polyline](*1 {\y}){A}(*2 {\y}){B}
\pcline(B)([offset=-1]{A}B)
\end{pspicture}
\end{document}