1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
function hachure(Nb_hachures,x,y,d,epaisseur)
daspect([1 1 1]);
rectangle('Position',[x y d d],'Curvature',[1 1]);
R = d/2;
xr = x+R;
yr = y+R;
Pas_hachures = d / Nb_hachures;
xpas = Pas_hachures / sqrt(2);
ypas = xpas;
a = 1;
b = yr - xr;
% équation du cercle : (x-xr)^2 + (y-yr)^2 = R^2
% en remplacant et en développant :
% (x-xr)^2 + (a*x+b-yr)^2 = R^2
% x^2 + xr^2 -2*x*xr + a^2*x^2 + (b-yr)^2 + 2*a*x*(b-yr) - R^2 = 0
% (1+a^2)*x^2 + (-2*xr+2*a*(b-yr))*x + (xr^2+(b-yr)^2-R^2) = 0
%
% Polynome à coefficients :
pol = [(1+a^2) (-2*xr+2*a*(b-yr)) (xr^2+(b-yr)^2-R^2)];
xcoord = roots(pol);
ycoord = a*xcoord + b;
xdepart = min(xcoord) - xpas / 2;
ydepart = min(ycoord) - ypas / 2;
for i=1:Nb_hachures
xdepart = xdepart + xpas;
ydepart = ydepart + ypas;
% La nouvelle hachure est de pente -1 et passe par xdepart,ydepart
% y = -x+b , b = xdepart + ydepart
% On procède comme avant pour obtenir les deux points d'intersection :
a = -1;
b = xdepart + ydepart;
pol = [(1+a^2) (-2*xr+2*a*(b-yr)) (xr^2+(b-yr)^2-R^2)];
xcoord = roots(pol);
ycoord = a*xcoord + b;
if exist('epaisseur')
line(xcoord,ycoord,'LineWidth',epaisseur);
else
line(xcoord,ycoord);
end
end |
Partager