TikZ - 如何通过一条线上的点画一条线,使新线垂直于旧线?

TikZ - 如何通过一条线上的点画一条线,使新线垂直于旧线?

A-B我在两点A和之间有一条线,在上有B一个点。XA-B

现在我想画一条线,X该线通过该线与线垂直A-B。我该怎么做?

还:

没有给出线周围的其他(直接相关)点,我只有X使用和创建两条相交路径的乘积\path。因此我说我不能使用代码来回答其他相关问题(如右图所示),至少我不知道如何使用。

图片

在此处输入图片描述

平均能量损失

\documentclass{standalone}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}

\usepackage{
tikz,
xspace
}

\usetikzlibrary{
intersections,
calc
}

\begin{document}
\begin{tikzpicture}[font=\small]
\draw
(0,0) coordinate (A)
(1,1.435) coordinate (B)
(3,3) coordinate (C)
;
\draw[thick] (A) rectangle (C);
\draw[thick] (A)--(B) node[pos=0.6] (x) {x};
\end{tikzpicture}
\end{document}

答案1

Jake 的链接确实有解决方案。

如果内容显示在 处,则需要X尝试使用inner和值。或者使用(感谢 Jake)。outer sep.center

\documentclass{standalone}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}

\usepackage{
tikz,
}

\usetikzlibrary{
intersections,
calc
}

\begin{document}
\begin{tikzpicture}[font=\small]
\draw
(0,0) coordinate (A)
(1,1.435) coordinate (B)
(3,3) coordinate (C)
;
\draw[thick] (A) rectangle (C);
\draw[thick] (A)--(B) node[pos=0.6, inner sep=0pt, outer sep=0pt](x){x};
\draw[thick] ($(x)!0.5cm!90:(A)$) -- ($(x)!0.5cm!-90:(A)$);
\end{tikzpicture}
\end{document}

答案2

这些基本的几何构造很容易元帖子一旦你掌握了陈述方程的窍门。这是我对规范的纯 Metapost 方法的尝试,在第 9 章末尾进行了解释Metafont 书籍

在此处输入图片描述

prologues := 3;
outputtemplate := "%j%c.eps";

beginfig(1);

% some arbitrary points
z1 = (20,80); 
z2 = (90,30);
z3 = (60,80); 

% a point somewhere on the line through z1 and z2;
z4 = whatever[z1,z2]; 

% the direction of z3 from z4 is at right angles to that of z2 from z1
z3-z4 = whatever*(z2-z1) rotated 90;

% mark the right angle neatly
draw unitsquare scaled 5 rotated angle (z2-z1) shifted z4 withcolor .7 white;

draw z1--z2;  
draw z3--z4 withcolor .67 red;

dotlabel.top("A",z1); 
dotlabel.bot("B",z2);
dotlabel.rt("X",z3);
endfig;
end.

whatever功能提供任意匿名数字变量。这些变量可以采用任意实数值和任意符号,因此在这种情况下减法的顺序无关紧要,并且点X可以位于线的任意一侧AB

Metapost(法语)上有丰富的几何材料来源锡拉丘兹网站

答案3

使用 PSTricks 的更快解决方案只是为了好玩。

\documentclass[pstricks,border=12pt,12pt]{standalone}
\usepackage{pst-eucl}

\begin{document}
\begin{pspicture}(8,8)
    \pstGeonode[CurveType=polyline](0,6){A}(6,0){B}([nodesep=4]{B}A){X}
    \pcline[linecolor=blue]([offset=1]{A}X)([offset=4]{B}X)
\end{pspicture}
\end{document}

在此处输入图片描述

答案4

带有脏污tikz和变换:

\documentclass{standalone}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}

\usepackage{
  tikz,
  xspace
}

\usetikzlibrary{
  intersections,
  calc
}

\begin{document}
\begin{tikzpicture}[font=\small]
  \draw
  (0,0) coordinate (A)
  (1,1.435) coordinate (B)
  (3,3) coordinate (C)
  ;
  \draw[thick] (A) rectangle (C);
  \draw[thick] (A)--(B) node[pos=0.6] (x) {x};

  \draw[red,thick,transform canvas={rotate around={90:(x)}}] (A) -- (B) ;
\end{tikzpicture}
\end{document}

您准备一条从 A 到 B 的线,然后(在绘制之前)将其绕 X 旋转 90°。当然,如果您想要不同的长度,您可以在从 A 到 B 的路径上相应地放置坐标。

显然,transform canvas如果坐标是用节点名称给出的,则使用是必要的,但是,如果直接给出坐标,则不需要。手册说这transform canvas是邪恶的,但硬编码坐标也是邪恶的,所以......

在此处输入图片描述

相关内容