function hachure(xe,ye,nbpas,a,typel,coul)

% La fonction HACHURE(XE,YE,[PAS,A,TYPEL,COUL]) permet de
% remplir un objet donné par XE,YE. Le NBPAS donne le
% nombre de hachures. A est l'angle d'inclinaison
% des hachures. TYPEL est le type de trait (pointillé,
% trait continu, etc.). COUL est la couleur du trait.
% données
if nargin < 6
	coul='y';
end
if nargin < 5
	typel='-';
end
if nargin < 4
	a=0;
end
if nargin < 3
	nbpas=20;
end

pas=(max(ye)-min(ye))/nbpas;
% fermeture de l'objet
ns=length(xe);		% nombre de sommets
axis([min(xe) max(xe) min(ye) max(ye)])
axis('equal')
axis('off')
hold on
cla
plot(xe,ye,coul)		% tracé de l'enveloppe
x=xe.*cos(a)-ye.*sin(a);% rotation pour l'inclinaison 
y=xe.*sin(a)+ye.*cos(a);% des hachures
xe=x;
ye=y;

% Recherche du min et max des y
bi=min(ye);
bs=max(ye);
% lignes de balayage
for l=bi:pas:bs
	ni=0;				% nombre d'intersections
	t=[];
	for i=1:ns-1
		h=i;    		% sommet haut
		b=h+1;			% sommet bas
		if ye(i)<ye(i+1)
			b=h;
			h=b+1;
		end
		y1=ye(b);
		y2=ye(h);
		if l==y1, y1=y1-1e-6;, end  % éviter que la ligne de
		if l==y2, y2=y2-1e-6;, end  % de balayage soit sur un sommet
		if (y2>l)&(y1<l)
			ni=ni+1;
			dx=xe(h)-xe(b);
			dy=ye(h)-ye(b);
			t(ni)=xe(b)+dx*(l-y1)/dy; % intersection
		end
	end
	t=sort(t);
	for i=1:2:ni
	    x1=t(i)*cos(-a)-l*sin(-a); % rotation inverse
		y1=t(i)*sin(-a)+l*cos(-a);
		x2=t(i+1)*cos(-a)-l*sin(-a);
		y2=t(i+1)*sin(-a)+l*cos(-a);
		plot([x1 x2],[y1 y2],[typel,coul])
	end
end
figure(gcf)
hold off

