因此,我绘制了速度箭头并在上面标注了标签。
最简单的例子是,我有一个节点 (a),我想要一个指向原点的箭头,但只指向一部分。距离可能很长或很短,可能取决于速度的大小。我找到了一个解决方案,但我想知道还有什么其他的,因为它不是那么优雅和 LaTeX-y。
我刚刚完成的工作是这一行:
\draw[->, shorten >=1cm] (a) -- (0,0)
node [near start, sloped, above] {12 m/s};
我不喜欢这个解决方案的部分是,我指定了要减少长度的量而不是它的实际长度,并且随着长度的变化,我必须改变标签的位置,而我真正想要的只是它以箭头长度为中心。
我在想,也许有某种方法可以将相对极坐标指定为“朝向该点,这么长”,而不是明确的角度。有什么想法吗?
答案1
您可以使用<coordinate>!<number>!<second coordinate>
语法;例如,表示“从到 的(3,3)!.25!(0,0)
四分之一处的坐标”。要将标签放置在箭头中间,请使用选项。例如:(3,3)
(0,0)
midway
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (3,3);
\coordinate (b) at (3,0);
\coordinate (c) at (-3,3);
\node (O) at (0,0) {origin};
\draw[->,red] (3,3) -- ( $ (a)!.25!(0,0) $ ) node [midway, sloped, above] {12 m/s};
\draw[->,blue] (b) -- ( $ (b)!.8!(0,0) $ ) node [midway, sloped, above] {12 m/s};
\draw[->,magenta] (c) -- ( $ (c)!.5!(0,0) $ ) node [midway, sloped, above] {12 m/s};
\end{tikzpicture}
\end{document}
更接近您需要的是语法,其含义是“使用从到直线上<coordinate>!<dimension>!<second coordinate>
距离 的点 ”。举个小例子:<dimension>
<coordinate>
<coordinate>
<second coordinate>
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (b) at (3,0);
\node (O) at (0,0) {origin};
\draw[->,magenta] (b) -- ( $ (b)!3cm!(0,0) $ ) node [midway, sloped, above] {12 m/s};
\end{tikzpicture}
\end{document}
当然,您可以将其包装在宏中,如以下示例所示。宏\arrowfromto[<attributes>]{<initial coordinate>}{<to coordinate>}{<distance>}{<label>}
将\draw
使用第一个可选参数中给出的选项应用,从<initial coordinate>
到远离它的点,以及从到` 的<distance>
直线上:<initial coordinate>
<to coordinate>, using a label given by
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
% syntax
% \arrowfromto[<attributes>]{<initial coordinate>}{<to coordinate>}{<distance>}{<label>}
\newcommand\arrowfromto[5][blue]{%
\draw[#1] #2 -- ( $ #2!#4!#3 $ ) node [midway, sloped, above] {#5}}
\coordinate (a) at (3,3);
\node (O) at (0,0) {$O$};
\node (a) at (0,3) {$a$};
\node (b) at (3,3) {$b$};
\arrowfromto{(O)}{(a)}{5cm}{5cm};
\arrowfromto[-latex,red]{(a)}{(b)}{3cm}{3cm};
\arrowfromto[<->,green!80!black]{(b)}{(O)}{10mm}{10mm};
\end{tikzpicture}
\end{document}