Please consider the following MWE adapted from this fantastic example of Kjell Magne Fauske's free body diagram:
\documentclass{article}
\usepackage{tikz} % From http://www.texample.net/tikz/examples/free-body-diagrams/
\usetikzlibrary{scopes}
\begin{document}
\def\iangle{0} % Angle of the inclined plane
\def\down{-90}
\def\arcr{0.5cm} % Radius of the arc used to indicate angles
\begin{tikzpicture}[
scale=4,
force/.style={->,draw=blue,fill=blue},
axis/.style={densely dashed,gray,font=\small},
M/.style={rectangle,draw,fill=lightgray,minimum size=0.5cm,thin},
m/.style={rectangle,draw=black,fill=lightgray,minimum size=0.3cm,thin},
plane/.style={draw=black,fill=blue!10},
string/.style={draw=red, thick},
pulley/.style={thick},
]
%% Free body diagram of M
\begin{scope}[rotate=\iangle]
\node[M,transform shape] (M) {};
% Draw axes and help lines
{[axis,->]
\draw (0,-1) -- (0,2) node[right] {$+y$};
\draw (M) -- ++(2,0) node[right] {$+x$}; % mental note for me: change "right" to "above"
}
% Forces
{[force,->]
% Assuming that Mg = 1. The normal force will therefore be cos(alpha)
\draw (M.center) -- ++(0,{cos(\iangle)}) node[above right] {$\vec N$};
\draw (M.west) -- ++(-1,0) node[left] {$\vec f_r$};
}
\end{scope}
% Draw gravity force. The code is put outside the rotated
% scope for simplicity. No need to do any angle calculations.
\draw[force,->] (M.center) -- ++(0,-1) node[below] {$\vec P$};
%%
\end{tikzpicture}
\end{document}
With your huge help, I would like to know how to
- add a line with slope (e.g. with an inclination of
53º
<- with the label and the correct slope). Note that the source already has a code for the angle, it may be the same in this case; - make proportional axis and not "from wherever you are, go above/right by
2
", e.g. a30 ~ 40%
more long than the length of the force lines (I ask this because ifscale=4
then the axis lines are too large than the force lines); - aditionally add a "floor" with black diagonal lines (maybe this Milo's excellent answer or this marmot's awesome response helps?);
- the friction force line
f_r
in front of the body and not behind; - the possibility of descompose the forces that are not horizontal/vertical (maybe with the same style of the axis line, idk, be creative with format!).
I want something like this:
If possible, I would like you to keep the code format of the MWE so that I do not have to adapt to another code style, but add to the current one.
If you think that the colors are monotonous you can propose darker grays or other styles!
Many thanks!
Best Answer
My humble attempt using
arrows
(which got superseded byarrows.meta
; see below for a version using that library),decoration.markings
andangles
libraries.Changing the 53° label to the position you want, also using
arrows.meta
instead ofarrows
: