// **********
// Initialisation
// **********
clear;
chdir('monchemin/');
// **********
// Constantes
// **********
// paramètres de l'arc de cercle
centre=[1;1];
rayon = 4;
angle = %pi/3:0.1:2*%pi/3;
// paramètres du bruit
var = 0.05;
// **********
// Programme principal
// **********
// génération des données
ligne_rayon_bruite = rayon + var*rand(angle,'norm');
foo = [cos(angle);sin(angle)].* ...
[ligne_rayon_bruite;ligne_rayon_bruite];
arc_cercle_bruite(1,:) = centre(1) + foo(1,:);
arc_cercle_bruite(2,:) = centre(2) + foo(2,:);
clf
plot(arc_cercle_bruite(1,:), arc_cercle_bruite(2,:), '+')
write('arc_cercle_bruite.txt', arc_cercle_bruite')
// **********
// Initialisation
// **********
clear;
chdir('monchemin/')
// **********
// fonctions
// **********
// régression circulaire linéaire
function [C, r, R]=regression_circulaire(X, Y)
// X, Y : points expérimentaux (vecteurs ligne)
// C : coordonnées du centre du cercle (vecteur)
// r : rayon du cercle (scalaire)
A = [X ; Y];
d = X.^2 + Y.^2;
// xetoile = 2*xcentre
// yetoile = 2*ycentre
// zetoile = r^2 - (xcentre^2 + ycentre^2)
[xyetoile, zetoile, sigma] = reglin(A, d);
C = 0.5*xyetoile;
r = sqrt(zetoile + C(1)^2 + C(2)^2);
// A'\d' si l'on ne s'intéresse pas à l'écart
R = sigma;
endfunction
// **********
// programme principal
// **********
// lecture des données
// Xdef, Ydef : vecteurs ligne
donnees = read('arc_cercle_bruite.txt', -1, 2)';
Xdef = donnees(1,:);
Ydef = donnees(2,:);
// regression
[centre, rayon, ecart] = regression_circulaire(Xdef, Ydef)
// tracé
clf;
// points
plot2d(Xdef, Ydef, style = -1) //, frameflag=4)
isoview(-2, 4, 1, 6);
xstring(-1.5, 5.5, 'C('+string(centre(1))+' ; '+string(centre(2))+') ; r = '+string(rayon))
// modèle
plot(centre(1), centre(2), 'r+')
diametre = 2*rayon;
xarc(centre(1) - rayon, centre(2) + rayon,...
diametre, diametre,...
0, 360*64)
a = get('hdl'); // ellipse
a.foreground = 5; // couleur
print(%io(2), centre)
print(%io(2), rayon)
print(%io(2), ecart)