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
Add fill=white
, like this: \draw[green!20!white, fill=white] (Q) -- (P) -- (R) -- (Q) -- cycle;
In order for the dots to appear on the front, I have taken the liberty of rewriting your code. You could have used Layers1, but the code would be more complicated than this and I don't think it's worth it if you need it just this time.
I added some new things like tikzset, so you can use a single word to define node properties (and you don't need to have those long node option lists), furthermore, you only need to fix one to fix them all, without having to change each one.
I defined the coordinates and used those coordinates first to write the nodes P, Q, and R, and then I used the same coordinates to create little black circle nodes.
\documentclass[margin=10pt]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{
points/.style={outer sep=0pt, circle, inner sep=1.5pt, fill=white},
dotnode/.style={circle, fill=black, inner sep=0pt,minimum size=4pt},
}
\begin{document}
\begin{tikzpicture}
\coordinate (P) at (-1,-1);
\coordinate (Q) at (2,1);
\coordinate (R) at ($(P)!1cm*sqrt(5)!-90:(Q)$);
\coordinate (a) at ($ (P)!5mm! -45:(Q) $);
\draw[yellow, line width=0.1pt] (-1.75,-3.25) grid[xstep=0.5, ystep=0.5] (2.75,1.75);
\draw[draw=gray!30,latex-latex] (0,1.75) +(0,0.25cm) node[above right] {$y$} -- (0,-3.25) -- +(0,-0.25cm);
\draw[draw=gray!30,latex-latex] (-1.75,0) +(-0.25cm,0) -- (2.75,0) -- +(0.25cm,0) node[below right] {$x$};
\node[points, anchor=east] at (-1,-1) {$P$};a
\node[points, anchor=west] at (2,1) {$Q$};
\node[points, anchor=west] at (R) {$R$};
\draw[green!20!white] (P) -- (Q);
\draw[green!20!white, fill=white] (Q) -- (P) -- (R) -- (Q) -- cycle;
\draw[green!20!white] (a) -- ($(P)!(a)!(Q)$);
\draw[green!20!white] (a) -- ($(P)!(a)!(R)$);
\node[dotnode] at (P) {};
\node[dotnode] at (Q) {};
\node[dotnode] at (R) {};
\end{tikzpicture}
\end{document}
1: See Section 90: Layered Graphics on the Pgfmanual, page 820.
Best Answer
I use Mathematica to find coordinates of the points
A, B, C, I
and radius of the incircle.With this code, you can change values of three numbers
a, b, c
enough large. E.g, I useda=7;b=8;c=10.