решение1
Вы добавляете пробел после второго правила. Используйте пустую строку перед vspace, чтобы он был добавлен между правилами.
Смотрите, первый пробел действует после того, как абзац разбит на строки, поэтому он идет после второго правила, перед yyy, но если перед пробелом есть пустая строка, он добавляется в этой точке и находится между строками, а не перед zzz.
%
\documentclass{article}
\begin{document}
%
xxx
\noindent\rule{\linewidth}{2pt}
\vspace{3.1cm}
\noindent\rule{\linewidth}{2pt}
yyy
\noindent\rule{\linewidth}{2pt}
\vspace{3.1cm}
\noindent\rule{\linewidth}{2pt}
zzz
\end{document}
%
\end{document}