How to fade a semiplane defined by line?

This is in principle very simple but tkz-euclide seems to mess up things a bit. One can just use a shading angle, which can, of course, be computed by TikZ.

\documentclass[tikz]{standalone}
\usetikzlibrary{calc,backgrounds}
\usepackage{amsmath}
\DeclareMathOperator{\re}{Re}
\DeclareMathOperator{\im}{Im}
\begin{document}
  \begin{tikzpicture}[anchor=center,declare function={f(\x)=\x-0.5;
    xmin=-1;xmax=3;}]
      \draw[-latex] (-1.5,0) -- (3.5,0) node[below left]{$\re z$};
      \draw[-latex] (0,-1.5) -- (0,3.5) node[below left]{$\im z$};;
      \path foreach \X/\Y/\L/\P in {.5/2/P_1/45, 2.5/0/P_2/45, 1.5/1/M/0}
      {(\X,\Y) coordinate[label=\P:$\L$] (\L)};
      \begin{scope}[on background layer]
      \shade let \p1=({xmin},{f(xmin)}),\p2=({xmax},{f(xmax)}),
      \n1={atan2(\y2-\y1,\x2-\x1)} in 
       [left color=white,right color=red,middle color=white,shading angle=\n1]
       (\p1) -- (\p2)  --  ($(\p2)!2cm!-90:(\p1)$) -- ($(\p1)!2cm!90:(\p2)$)
        ;
      \end{scope}   
      \draw[red,thick] plot[variable=\x,domain=xmin:xmax] ({\x},{f(\x)});
      \draw (P_1) -- (P_2);
      \node[anchor=south,red] at (1.5,3) {$|z-z_1|\leq|z-z_2| $};
  \end{tikzpicture}
\end{document}

enter image description here


You may rotate the shading area to the x-axis, shade, then rotate back.

enter image description here

\documentclass[tikz,border=5mm]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\coordinate[label=above right:$P_1$] (P1) at (.5,2);
\coordinate[label=above right:$P_2$] (P2) at (2.5,0);
\coordinate[label=right:$M$] (M) at (1.5,1);
\coordinate (A) at (2,1.5);
\pgfmathsetmacro{\a}{.5-sqrt(2)}
\pgfmathsetmacro{\b}{.5+sqrt(12.5)}

\shade[top color=white,bottom color=red!50,rotate around={45:(.5,0)}] 
(\a,0) rectangle (\b,.8);
\tkzMarkRightAngle(P1,M,A)
\draw[-latex] (-1,0)--(3.5,0) node[below]{\rm{Re}$(x)$};
\draw[-latex] (0,-1)--(0,3.5) node[left]{\rm{Im}$(x)$};

\draw (P1)--(P2);
\draw[red,thick] plot[domain=-.5:3] (\x,{\x-.5});
\foreach \p in {P1,P2,M}
\fill (\p) circle(1pt);
\node at (1.8,3.2){$|z-z_1|\leq|z-z_2|$};
\end{tikzpicture}
\end{document}

This is a tkz-euclid solution.

\documentclass[tikz]{standalone}
\usepackage{tkz-euclide,amsmath}
\usetkzobj{all}

\begin{document}
  \begin{tikzpicture}
    % set working area
    \tkzInit[xmin=-1, xmax=3, ymin=-1, ymax=3]
    \clip (-1.5,-1.5) rectangle (4,4); % more precise than \tkzClip[space=1]
    % define points
    \tkzDefPoints{.5/2/P_1, 2.5/0/P_2}
    \tkzDefMidPoint(P_1,P_2)\tkzGetPoint{M}
    \tkzDefLine[mediator](P_1,P_2)\tkzGetPoints{A1}{A2}
    \tkzDefPointWith[orthogonal,K=-1](A1,M)\tkzGetPoint{A4}
    \tkzDefPointWith[orthogonal,K=1](A2,M)\tkzGetPoint{A3}
    % shade half plane
    \tkzFillPolygon[draw=white,top color=white,bottom color=red,middle color=white,shading angle=45](A1,A2,A3,A4)
    \tkzDrawSegment[red](A1,A2)
    % draw axes
    \tkzDrawX[noticks, label={\(\operatorname{Re}(x)\)}]
    \tkzDrawY[noticks, label={\(\operatorname{Im}(x)\)}]
    % draw segments
    \tkzDrawSegment(P_1,P_2)
    % mark angles
    \tkzMarkRightAngle(A1,M,P_1)
    % mark points
    \tkzDrawPoints[fill=black, size=1mm](P_1,P_2,M)
    \tkzLabelPoints[above right](P_1,P_2)
    \tkzLabelPoints[right](M)
    % extra text
    \tkzText[color=black](1.5,3){\(|z-z_1|\leq|z-z_2|\)}
  \end{tikzpicture}
\end{document}

enter image description here