Method 1: Approx Solution: Rectangular Fill
You can apply a fill
to a path consisting of the four corners that you want to fill:
\fill [fill=green!25] (left) -- (left2_d) -- (right2_d) -- (right) -- cycle;
\fill [fill=red!25] (left) -- (left_d) -- (right_d) -- (right) -- (left) -- cycle;
This yields what looks like the desired results, but does not curve along the arc.
Method 2: Circular Fill
Instead of a rectangular fill, you could actually define the curve along the path which will certainly yield the correct results, but I think an easier method would be to use a \clip
instead.
Method 3: Clip
I would recommend that you over fill
the area, and clip
it to the desired region.
Easiest way to over fill the area is to extend the vectors from near the origin to the circular edge using a syntax such as ($(left)!1.1!(left2_d)$)
to locate the point 10% past the circular arc. So before we apply the \clip
the fill region looks like:

By adding \clip (P) arc (180:0:4) -- (Phat) -- cycle
we limit all the drawing to be within the desired region and achieve:

I also placed the portions that needed clipping within a scope
so that the clip does not affect the lines that are drawn on top of the clip path. Comment out the \begin{scope} and
\end{scope}` to see what I mean.
Notes:
- Using
mark coordinate
on a \coordinate
does not make sense as \coordinate
does not do any drawing, just locates a coordinate, so I have removed that.
- Also, I rearranged the order of the drawing to show the things I think you wanted to be on top. An alternate way would be to use layers, but simply rearranging the drawing order suffices for many uses.
- Nodes can be placed at the end of the path -- this is usually an easier option than placing the label manually based on coordinates. I adjust the placement of the
n
label yo illustrate this.
- I am not sure exactly why this was necessary, but the horizontal line needed a tweak of
0.5\pgflinewidth
on either end to get the edges to meet properly.
As far as your other request to bend the colors over the shaded region you could use opacity as Lionel MANSUY suggested, but I find it clearer if you combine opacity with some sort of pattern, which requires \usetikzlibrary{patterns}
:
\fill [fill=green, pattern=crosshatch dots]
(left) -- ($(left)!1.1!(left2_d)$) --
($(right)!1.1!(right2_d)$) -- (right) -- cycle;
\fill [draw=none, fill=red!50, fill opacity=0.25]
(left) -- ($(left)!1.1!(left_d)$) --
($(right)!1.1!(right_d)$) -- (right) -- cycle;
which yields:

Code:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
%\tikzstyle{mark coordinate}=[minimum size=0pt,inner sep=0,outer
% sep=0,fill=none,circle]
\coordinate (M) at ( 0,0);
\coordinate (L) at (-4,0);
\coordinate (R) at ( 4,0);
\coordinate (N) at ( 0,4);
% The area delimiters
\coordinate (left) at (-0.5,0);
\coordinate (right) at (0.5,0);
% The two destination point pairs
\coordinate (left_d) at (3.696844, 1.527526);
\coordinate (right_d) at (3.813822, 1.206132);
\coordinate (left2_d) at (-2.363246, 3.227237);
\coordinate (right2_d) at (-1.613246, 3.660250);
% Draw arc
\coordinate (P) at (-4,0);
\coordinate (Phat) at (4,0);
\begin{scope}
\clip (P) arc (180:0:4) -- (Phat) -- cycle;
\fill [fill=green!25]
(left) --
($(left)!1.1!(left2_d)$) --
($(right)!1.1!(right2_d)$) --
(right) --
cycle;
\fill [draw=none, fill=red!25]
(left) --
($(left)!1.1!(left_d)$) --
($(right)!1.1!(right_d)$) --
(right) --
(left) -- cycle;
\end{scope}
\draw [solid, ultra thick]
let \p1=(P),
\p2=(Phat),
\n0={0.5*veclen(\x1-\x2,\y1-\y2)}
in [rotate={atan((\y1-\y2)/(\x1-\x2))}] (P) arc (180:0:\n0);
% The parallel lines
\definecolor{darkgreen}{rgb}{0,0.5,0}
\draw[red] (left) to (left_d);
\draw[red] (right) to (right_d);
\draw[darkgreen] (left) to (left2_d);
\draw[darkgreen] (right) to (right2_d);
% Horizontal axis (surface)
\draw[solid, ultra thick] ($(L)-(0.5\pgflinewidth,0)$) --
($(R)+(0.5\pgflinewidth,0)$);
% Normal vector (+ label)
%\draw [ultra thick,-latex,black] (M) to (N);
%\node[anchor=west] (note1) at (-0.5,3.5) {$\mathbf{n}$};
\draw [ultra thick,-latex,black] (M) to (N)
node [below left, yshift=-7] {$\mathbf{n}$};
\end{tikzpicture}
\end{document}