¿Cómo hacer el punto en medio del cuadrado?

¿Cómo hacer el punto en medio del cuadrado?
\begin{tikzpicture}

\coordinate (1) at (0,0);
\coordinate (2) at (2,0);
\coordinate (3) at (2,2);
\coordinate (4) at (0,2);
\coordinate (5) at (0,0);
\coordinate (6) at ($(1)!.5!(2)$);
\coordinate (7) at ($(2)!.5!(3)$);
\coordinate (8) at ($(3)!.5!(4)$);
\coordinate (9) at ($(4)!.5!(1)$);


\foreach \i in {1,2}
\fill (\i) circle (1pt) node [below] {\tiny \i};
\foreach \i in {3,4}
\fill (\i) circle (1pt) node [above] {\tiny \i};
\foreach \i in {6} 
\fill (\i) circle (1pt) node [below] {\tiny 5};
\foreach \i in {7}
\fill (\i) circle (1pt) node [right] {\tiny 6};
\foreach \i in {8}
\fill (\i) circle (1pt) node [above] {\tiny 7};
\foreach \i in {9}
\fill (\i) circle (1pt) node [left] {\tiny 8};        

\draw (1)--(2)--(3)--(4)--(5);

\end{tikzpicture}

El código anterior para el cuadrado del lado derecho quiero hacer el punto medio que da en el punto cuadrado izquierdo (9). ingrese la descripción de la imagen aquí

Respuesta1

Puede calcular el punto medio (9)a través de (1)!0.5!(3), que denota un punto 0.5desde la forma del camino (1)hasta (3). También lo he reducido a uno solo \foreach:

ingrese la descripción de la imagen aquí

Código:

documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}


\begin{tikzpicture}

\coordinate (1) at (0,0);
\coordinate (2) at (2,0);
\coordinate (3) at (2,2);
\coordinate (4) at (0,2);
\coordinate (5) at ($(1)!.5!(2)$); 
\coordinate (6) at ($(2)!.5!(3)$);
\coordinate (7) at ($(3)!.5!(4)$);
\coordinate (8) at ($(1)!.5!(4)$);
\coordinate (9) at ($(1)!.5!(3)$);


\foreach \i/\Position in {1/below, 2/below, 3/above, 4/above, 5/below, 6/right, 7/above, 8/left, 9/above right} {
    \fill (\i) circle (1pt) node [\Position] {\tiny \i};
}      

\draw (1)--(2)--(3)--(4)-- cycle;

\end{tikzpicture}
\end{document}

Respuesta2

También puedes utilizar las coordenadas otogonales.

\coordinate (9) at (8-|5);   %%% <--- new

(8-|5)significa tomar ylas mismas coordenadas que las del nodo (8)y las coordenadas x que las del nodo (5).

Además, el \foreachbucle se puede refinar.

\documentclass[tikz,varwidth]{standalone}%

\usetikzlibrary{calc,positioning}
\begin{document}

\begin{tikzpicture}

\coordinate (1) at (0,0);
\coordinate (2) at (2,0);
\coordinate (3) at (2,2);
\coordinate (4) at (0,2);
\coordinate (5) at ($(1)!.5!(2)$);
\coordinate (6) at ($(2)!.5!(3)$);
\coordinate (7) at ($(3)!.5!(4)$);
\coordinate (8) at ($(4)!.5!(1)$);
\coordinate (9) at (8-|5);   %%% <--- new


\foreach \i/\position in {1/below,2/below,3/above,4/above,5/below,6/right,7/above,8/left,9/above right}
\fill (\i) circle (1pt) node [\position] {\tiny \i};

\draw (1)--(2)--(3)--(4)--cycle;

\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Otra forma sencilla es utilizar un nodo rectangular.

\documentclass[tikz,varwidth]{standalone}%

\usetikzlibrary{calc,positioning}
\begin{document}

\begin{tikzpicture}

\node[draw,minimum height=2cm,minimum width=2cm] (a) at (1,1) {};

\foreach \i/\a/\position in 
{south west/1/below,south east/2/below,north east/3/above,north west/4/above,
south/5/below,east/6/right,north/7/above,west/8/left,center/9/above right} {%
  \fill (a.\i) circle (1pt) node [\position] {\tiny \a}; 
}
\end{tikzpicture}
\end{document}

información relacionada