monitor("lezione16-04-26.txt","io"); //---Robot dell'esempio 1, [CLO, p. 299, 305-310] ring r=(0,l3,l2,a,b),(c1,s1,c2,s2),dp; option(redSB); ideal id=l3*(c1*c2-s1*s2)+l2*c1-a, l3*(c1*s2+c2*s1)+l2*s1-b, c1^2+s1^2-1,c2^2+s2^2-1; ideal j=std(id); dim(j); j; // [CLO, p. 305, formula (2)] ideal ids = subst(id,l3,1,l2,1,a,0,b,0); ring rs = 0,(c1,s1,c2,s2),dp; ideal ids = imap(r,ids); std(ids); // [CLO, p. 307, formula (4)] monitor(""); quit; //---Calcoli non fatti a lezione: ring t=0,(c2,s2,c1,s1,l3,l2,a,b),lp; ideal id=imap(r,id); ring re=(real,6),(c2,s2,c1,s1,l3,l2,a,b),dp; ideal id=imap(t,id); //---Pomiamo l2 = l3 = 1 // e a = 1, b = 1. ideal ids=subst(id,l3,1,l2,1,a,1,b,1); //---Cambiamo ulteriormente l'anello per ottenere // un ideale 0-dimensionale. ring re2=(real,6),(c2,s2,c1,s1),dp; ideal id=imap(re,ids); ideal ids=std(id); dim(ids); //---Risolviamo il problema cinematico inverso, // cioe' dato il posizionamento della mano // (a,b) calcoliamo (c2,s2,c1,s1)=: elenco l. LIB "solve.lib"; def l=solve(ids,6,0); l; setring(r); ideal ids=subst(id,l3,1,l2,1); ideal ids2=subst(id,l3,2,l2,1); ideal ids3=subst(id,l3,1,l2,2); ring rs=(0,a,b),(c1,s1,c2,s2),dp; ideal ids=imap(r,ids); std(ids); ideal ids2=imap(r,ids2); std(ids2); ideal ids3=imap(r,ids3); std(ids3); ideal ids1=subst(ids,a,0,b,0); ring rs1=0,(c1,s1,c2,s2),dp; ideal ids1=imap(rs,ids1); std(ids1);