I am also not 100% sure about the question, but hope this addresses the various parts I see.

Here is an example of a straight line, a curved line, and a shortened curved line (in violet):

## 1. Draw Straight Line:

```
\draw (G) -- (R)
```

produces the straight olive line from `(G)`

to `(R)`

.

## 2. Curved Line:

```
\draw (R) to[out=-20,in=-70] (B)
```

produces the red line with curvature. Instead of using `--`

, we use the `to`

syntax, and the options `out=`

specifies the angle at the start point, and the `in=`

specifies the angle at the end point.

Using `distance=3cm`

with the same `in=`

, and `out=`

we get the red dotted line.

## 3. Shortened Line:

Withe either of the straight or curved lines, one can use `shorten <=`

to shorten the start point or `shorten >=`

to shorten the end point. A shorten of `0.25cm`

is applied to both ends of the violet line.

## Code:

```
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[ultra thick]
\coordinate (G) at (2.3,6.1);
\coordinate (R) at (6.4,3.9);
\coordinate (B) at (2.1,1.7);
\node [fill=green,circle] at (G) {};
\node [fill=red, circle] at (R) {};
\node [fill=blue, circle] at (B) {};
\draw [olive, -] (G) -- (R);
\draw [red] (R) to[out=-20,in=-70] (B);
\draw [red,dotted] (R) to[out=-20,in=-70, distance=3cm ] (B);
\draw [violet, ->, shorten <= 0.25cm, shorten >= 0.25cm] (B) to[out=120,in=150] (G);
\end{tikzpicture}
\end{document}
```

*Please see revision 4 for a previous take on Op’s conditions and given variables.*

The paper plane vectors are relative easy to produce. As you want to label them, I’d use a node with a custom path picture. Common properties are saved in the `paper plane vector`

. The optional argument to `paper plane vector in`

and `paper plane vector out`

can be used to change the label.

As both triangles are rather hard to generalize, I created two distinctive but similar styles

`vector triangle u+w`

and
`vector triangle w+u`

.

The both accept four arguments, delimited by `:`

. (I agree, both names and arguments could be chosen better.) Those arguments are:

- Angle
*α*,
- angle
*β*,
- length of vector
*w*,
- an index for the edge nodes (it will be forwarded to the edge styles).

Further styles exist for

- the angle marking
`@vector triangle angle`

(parameter 4 and 5 are auxiliary ones for when both angles lie at the same point) and three additional styles
- for the
`dashed line`

,
- for the
`arc line`

and
- for the
`arc node`

;

`every vector`

and `every vector node`

, as well as
- a style for every vector and every vector node (for
*u*, *w* and *c*).

The style `dashed line`

will be changed for when it will be under the *u* vector anyway or when it will be the same as the dashed line from the other angle.

In the `u+w`

style the `parallel marking`

will be appended to `dashed line`

and will also be used for the *u* vector. The `decorations.markings`

library is used for this.

The last few styles (see the comments in the code) are actually not mandatory as they are accessed with `/.try`

handler. Without them, you will see a very raw version of the drawing.

## Code

```
\documentclass[tikz,convert=false]{standalone}
\colorlet{RED}{red!75!black}
\colorlet{BLACK}{black}
\colorlet{BLUE}{blue!75!black}
\usetikzlibrary{decorations.markings}
\makeatletter
\tikzset{edge node/.code={% stolen from the CVS version
\expandafter\def\expandafter\tikz@tonodes\expandafter{\tikz@tonodes #1}}}
\makeatother
%% The paper plane vector things
\tikzset{
paper plane vector/.style={
shape=circle,
inner sep=+0pt,
minimum size=+1em,
label={#1}
},
paper plane vector out/.style={
paper plane vector={[RED]above left:{$#1$}},
draw=RED,
path picture={
\fill[RED] (path picture bounding box.center) circle [radius=+1.41\pgflinewidth];
}
},
paper plane vector in/.style={
paper plane vector={[BLACK]above left:{$#1$}},
draw=BLACK,
path picture={
\draw[BLACK] (path picture bounding box.south west) -- (path picture bounding box.north east)
(path picture bounding box.south east) -- (path picture bounding box.north west);
}
},
paper plane vector in/.default=u,
paper plane vector out/.default=w}
%% The parallel marking
\tikzset{
parallel marking/.style={
postaction={
decoration={
name=markings,
mark=at position .33 with {\draw[solid,thin,-] (+-6\pgflinewidth,+-4\pgflinewidth) -- ++ (+8\pgflinewidth,+8\pgflinewidth)
(+-2\pgflinewidth,+-4\pgflinewidth) -- ++ (+8\pgflinewidth,+8\pgflinewidth); }
},
decorate}}}
%% The triangles, consisting only of an 'insert path'
\tikzset{
vector triangle u+w/.style args={#1:#2:#3:#4}{% #1 = alpha,
% #2 = beta,
% #3 = length of w,
% #4 = an argument that gets forwarded to the
% edges, here an index
insert path={
coordinate (vt@o)
+({90+#2}:{#3}) coordinate (vt@c)
{[dashed line/.append style=parallel marking, @vector triangle angle={vt@o}{#2}{\beta}{0}{0}]}
{[dashed line/.style={draw=none},@vector triangle angle={vt@o}{#1}{\alpha}{.1}{#2}]}
(intersection of vt@o--[shift={(90+#1:20)}] vt@o and vt@c--[shift={(down:20)}] vt@c) edge[u vector/.try={#4},parallel marking] (vt@c)
edge[c vector/.try={#4}] (vt@o)
(vt@c) edge[w vector/.try={#4}] (vt@o)
}
},
vector triangle w+u/.style args={#1:#2:#3:#4}{% #1 = alpha,
% #2 = beta,
% #3 = length of w,
% #4 = an argument that gets forwarded to the
% edges, here an index
insert path={
coordinate (vt@o)
+ ({90+#2-180}:{#3}) coordinate (vt@c)
(intersection of vt@o--[shift={({#1-90}:20)}] vt@o and vt@c--[shift={(up:20)}] vt@c) coordinate (vt@aux)
[@vector triangle angle={vt@aux}{#1}{\alpha}{0}{0}]
{[dashed line/.style={draw=none},@vector triangle angle={vt@c}{#2}{\beta}{0}{0}]}
(vt@o) edge[w vector/.try={#4}] (vt@c)
edge[c vector/.try={#4}] (vt@aux)
(vt@c) edge[u vector/.try={#4}] (vt@aux)
}
},
%% The angle drawing, the arguments #4 and #5 are only for angles that overlap (see the u+w style why), usually the ary '0'
@vector triangle angle/.style n args={5}{
insert path={
(#1) edge[dashed line/.try] ++ (up:1)
++(up:.75+#4) edge[arc line/.try, to path={arc [radius=.75+#4, start angle=90, delta angle={#2}]}] ()
node [rotate={#5+(#2-#5)/2}, arc node/.try] at ([shift=({90+#5+(#2-#5)/2}:.5)] #1) {$#3$}}}}
%% A few presets for the vectors and nodes.
%% If these are not given, the drawing will still work (the '.try' handler takes care of that)
%% but you will have a raw version (try it!)
\tikzset{
every vector/.style 2 args={shorten >=\pgflinewidth,->,edge node={node[#1 node/.try] {$\vec{#1}_{#2}$}}},
w vector/.style={every vector={w}{#1},RED},
u vector/.style={every vector={u}{#1},BLACK},
c vector/.style={every vector={c}{#1},BLUE},
every vector node/.style={below,sloped,text={#1}},
w node/.style={every vector node=RED},
u node/.style={every vector node=BLACK},
c node/.style={every vector node=BLUE,above},
dashed line/.style={thin, densely dotted, line cap=butt},
arc line/.style={thin, solid, ->, line cap=butt, shorten >=.5\pgflinewidth, shorten <=.5\pgflinewidth},
arc node/.style={font=\scriptsize},
}
\begin{document}
\begin{tikzpicture}[>=latex,line cap=round]
\node[paper plane vector in] {};
\node[paper plane vector out] at (-1,0) {};
\path (-1,-2) [vector triangle w+u=105:45:4.5:1];
\path (7,-3) [vector triangle u+w=105:45:4.5:2];
\end{tikzpicture}
\end{document}
```

## Output

## Best Answer

That is due to the fact that you are adding the final coordinate. They should not be there. Simply change the lines to:

This problem arises in far simpler situations as well, it is not inherent to the curve. Consider for example

`\draw[->] (0,0) -- (2,0) (2,0);`

which will give an upward pointing arrow on the end of a horizontal line. Basically the new coordinate begins a new path segment and only the last segment of the path is given the arrowtip.