yo,
dans l'approche ci-dessous par exemple, j'itère sur le point M qu'on cherche, (tq angle(MD,MA)=133 et angle(MD,MC) = 324) et je regarde en calculant justement la rotation de de centre M du point D, si il se retrouve aligné avec [MD,MA)
- Code: Tout sélectionner
1;
clear all;
global A=[167601.760700,152222.611700]';
global C=[167510.304400,152351.394200]';
global D=[167549.606900,152434.967800]';
global angleA = 133.65 * pi/180
global angleC = 324 * pi/180
function r = myangle(M,F,G)
xM = M(1);
yM = M(2);
xF = F(1);
yF = F(2);
xG = G(1);
yG = G(2);
vMF = [xF-xM, yF-yM];
vMG = [xG-xM, yG-yM];
r = mod(atan2( (vMF(1)*vMG(2)) - (vMG(1)*vMF(2)), vMF*vMG')+2*pi, 2*pi);
endfunction
function res = angleAlign(M,D,A, a)
Dm = D-M;
Ap = [Dm(1)*cos(a)-Dm(2)*sin(a), Dm(1)*sin(a)+Dm(2)*cos(a)]' + M;
MA = A-M;
MAp = Ap-M;
res = (1- (MA'*MAp)/(norm(MA)*norm(MAp)))^2;
endfunction
function res = phi (M)
global A;
global C;
global D;
global angleA;
global angleC;
res = angleAlign(M, D, A, angleA)+angleAlign(M,D,C, angleC);
return;
endfunction
I=(A+C+D)/3;
[x, obj, info, iter, nf, lambda]=sqp(I,@phi)
angleMDA = (myangle(x,D,A))*180/pi
angleMDC = (myangle(x,D,C))*180/pi
resultat:
- Code: Tout sélectionner
x =
1.6760e+05
1.5222e+05
obj = 0.21523
info = 104
iter = 28
nf = 88
lambda = [](0x1)
angleMDA = 133.99
angleMDC = 21.583
on voit que l'angle (MD,MC) trouvé est loin d'être satisfaisant.
Peut-être qu'il y a des problèmes dans ma modélisation (à cause des prob numériques??), j'ai aussi tenté une approche avec pour erreur l'écart aux angles attendus, qui ne donne pas non plus un résultat satisfaisant
- Code: Tout sélectionner
1;
global A=[167601.760700,152222.611700];
global C=[167510.304400,152351.394200];
global D=[167549.606900,152434.967800];
global tana = mod((133.65 * pi/180)+2*pi, 2*pi)
global tanb = mod((324 * pi/180)+2*pi, 2*pi)
tana
tanb
function r = myangle(M,F,G)
xM = M(1);
yM = M(2);
xF = F(1);
yF = F(2);
xG = G(1);
yG = G(2);
vMF = [xF-xM, yF-yM];
vMG = [xG-xM, yG-yM];
r = mod(atan2( (vMF(1)*vMG(2)) - (vMG(1)*vMF(2)), vMF*vMG')+2*pi, 2*pi);
endfunction
function res = phi (M)
global A;
global C;
global D;
global tana;
global tanb;
%(OD,OA)
tanu = myangle(M, D, A);
tanv = myangle(M, D, C);
res = (tanu - tana)^2 +(tanv-tanb)^2;
res = abs(tanu - tana) + abs(tanv - tanb);
return;
endfunction
I=(A+C+D)/3;
tana
[x, obj, info, iter, nf, lambda]=sqp(I,@phi)
angleMDA = (myangle(x,D,A))*180/pi
angleMDC = (myangle(x,D,C))
angleCDA = myangle(C,D,A)*180/pi
- Code: Tout sélectionner
tana = 2.3326
tanb = 5.6549
tana = 2.3326
x =
1.6759e+05
1.5240e+05
obj = 4.4239
info = 104
iter = 12
nf = 52
lambda = [](0x1)
angleMDA = 133.65
angleMDC = 1.2310
comme on constate que tout le temps le premier angle est correct, vu que je suis un boucher, la prochaine étape est probablement de se poser en A (par ex) et d'itérer avec des rayons R de plus en plus grand et pour un R donné, de calculer d'abord l'unique point M respectant l'angle (MD,MA), puis pour ce point M, de calculer l'angle (MD,MC) et de (1 regarder comment l'angle évolue parce que je vois rien, et 2 garder le meilleur angle)