5

I have a two point p1 and p2:

  \node (p1) at (-1,-2) [point, label = {left:$P_1$}]{};
  \node (p2) at (3, 4) [point, label = {below:$P_2$}]{};

How to draw a unit vector beginning at the point p1 and directed to a point p2 using only the variables p1 and p2?

  • By normalizing it. – c.p. Dec 4 '14 at 12:44
  • 1
    Don't use \node to define \coordinate... – Paul Gaborit Dec 4 '14 at 13:23
6

You can use the calc library syntax with units. If you omit the unit it is understood as the full path percentage. Otherwise, depending on the unit that distance is traveled.

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[point/.style={circle,draw,inner sep=2pt}]
\node[point, label = {left:$P_1$}] (p1) at (-1,-2) {}; 
\node[point, label = {below:$P_2$}] (p2) at (3, 4) {};

\foreach \x[count=\xi] in {,mm,cm,in}{
\draw[opacity=1/\xi,line width=\xi pt] (p1) -- ($(p1)!1\x!(p2)$);% 1,1mm,1cm,1in respectively
}
\end{tikzpicture}
\end{document}

enter image description here

  • p1 is not p1.center... – Paul Gaborit Dec 4 '14 at 13:22
  • Ok, but how to get distance between points p1 and p2? – user67420 Dec 4 '14 at 13:30
  • 1
    @user67420 Search for veclen in pgfmanual. – user11232 Dec 4 '14 at 13:53
  • @user67420 You want a unit vector why do you need the distance? You just need to specify the 1<unit> – percusse Dec 4 '14 at 14:39
  • @PaulGaborit True, but it is for example. You just need either (p2) for the finish or ($(p1)!0!(p2)$) for the start to make things equal for the full path. – percusse Dec 4 '14 at 14:41
3

This draws the lines by a fraction of the distance between p1 and p1. For example 20% of the distance between p1 and p2:

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[point/.style={circle,draw,inner sep=2pt}]
\node[coordinate, label = {left:$P_1$}] (p1) at (-1,-2){};
\node[coordinate, label = {below right:$P_2$}] (p2) at (3, 4){};
\node[point] at (p1){};
\node[point] at (p2){};

\draw  let
\p1 = ($ (p2) - (p1) $),
\n1 = {veclen(\x1,\y1)}
in
(p1) -- ($(p1)!0.2*\n1!(p2)$)node[pos=1,right] {\pgfmathparse{0.2*\n1}\pgfmathresult};
\end{tikzpicture}
\end{document}

enter image description here

  • 0.2*\n1 is equivalent to 0.2 in this context. – percusse Dec 4 '14 at 14:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.