在这个例子中,我有一条从原点到的线(2,2)
,我将坐标放在了(A)
。(2,2)
我想要做的是(A)
在同一条线上放置一个低于 1 厘米的新坐标,然后在新位置画一条垂直线。这是我试过的代码,但它不能正常工作。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw (0, 0) -- (2, 2) coordinate (A);
\coordinate[style = {shorten >= -1cm}] (P) at (A);
\draw (P) -- ($(P)!2cm!-90:(A)$);
\end{tikzpicture}
\end{document}
正如您所看到的,我尝试缩短坐标,但是当我在新位置画一条线时,(P)
它会从 直接向上画一条线(A)
。
为了回答这个问题,不要假设线角度未知,因为这里是 45 度。如果是这样的话,我们可能可以做类似(A)
++(225:1cm) 坐标 (P) 的事情,但在我的实际问题中,我们没有如此干净的东西可以使用。
期望结果:
编辑2:
因此,此代码通过将线停止在 1 厘米短处而接近,但当我需要将 (P) 放置在红线末尾时,(P) 坐标仍然放置在 (A) 的位置。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw (0, 0) -- (2, 2) coordinate (A);
\draw[shorten >= 1cm, red] (0, 0) -- (2, 2) coordinate (P);
\draw[blue] (P) -- +(1, 0);
\end{tikzpicture}
\end{document}
答案1
您可以使用calc
库函数在两点之间进行插值,然后使用旋转来正交于路径
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw (0,0) coordinate (O) -- (3.72,2.46) coordinate(A);
\draw ($(O)!0.699!(A)$)coordinate (P) -- ($(P)!1cm!-90:(A)$);
\end{tikzpicture}
\end{document}
绝对距离:
\documentclass{article}
%\url{http://tex.stackexchange.com/q/123469/86}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw (0, 0) coordinate (O) -- (2, 2) coordinate (A);
\coordinate (P) at ($(A)!1cm!(O)$);
\draw (P) -- ($(P)!2cm!-90:(A)$);
\end{tikzpicture}
\end{document}
答案2
使用 PSTricks。只是为了好玩!
情况1:
要定义P
径向下方 1 个单位的点A
,请使用([nodesep=1]{O}A)
。要定义一条线经过的点,并且该线垂直于OA
,请使用([nodesep=1,offset=2]{O}A)
。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
\pstGeonode
(0,0){O}
(2,2){A}
([nodesep=1]{O}A){P}
\psline[linecolor=red](O)(A)
\psline[linecolor=blue](P)([nodesep=1,offset=2]{O}A)
\end{pspicture}
\end{document}
案例 2:
要定义P
垂直方向低于 1 个单位的点A
,使用([Ynodesep=1]{O}A)
。要定义一条直线经过的点,并且该点垂直于OA
,使用([Ynodesep=1,offset=2]{O}A)
。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid](-1,-1)(3,3)
\pstGeonode
(0,0){O}
(2,2){A}
([Ynodesep=1]{O}A){P}
\psline[linecolor=red](O)(A)
\psline[linecolor=blue](P)([Ynodesep=1,offset=2]{O}A)
\end{pspicture}
\end{document}