Suite à une demande de François Meria sur la liste Syracuse, voici quelques essais de production.
meria3dsphere.mp [ source brut ]
input geometriesyr16; vardef FX(expr t,v)=cosd(c*t)*cosd(c*v) enddef; vardef FY(expr t,v)=cosd(c*t)*sind(c*v) enddef; vardef FZ(expr t,v)=sind(c*t) enddef;

figureespace(-10u,-10u,10u,10u); Initialisation(5,22,20,750); path equa,pole; color O,A,B,N; O=(0,0,0); A=(1,0,0); B=(0,1,0); N=(0,0,1); equa=cercles(O,B,O,B,-A); %fillcolor:=ciel; %transparence equa; pole=cercles(O,B,O,B,N); color S[]; S1=(cosd(75)*cosd(40),sind(75)*cosd(40),sind(40)); S2=(cosd(15)*cosd(10),sind(15)*cosd(10),sind(10)); S3=(cosd(45)*cosd(65),sind(45)*cosd(65),sind(65)); drawoptions(withcolor gris); InitialiseParametre(-pi,pi,pi/30,-pi,pi,pi/30); FamilleDesCourbesEnU; FamilleDesCourbesEnV; drawoptions(); drawarrow segment(-B,B) dashed dashpattern(on12bp off6bp on3bp off6bp); drawarrow segment(-A,A) dashed dashpattern(on12bp off6bp on3bp off6bp); drawarrow segment(-N,N) dashed dashpattern(on12bp off6bp on3bp off6bp); marque_p:="plein"; pointe(S1,S2,S3); trace segment(O,S1); trace chemin(O,(redpart(S1),greenpart(S1),0),S1) dashed evenly; trace segment((redpart(S1),greenpart(S1),0),(redpart(S1),0,0)) dashed withdots; trace segment((redpart(S1),greenpart(S1),0),(0,greenpart(S1),0)) dashed withdots; trace segment(O,S2); trace chemin(O,(redpart(S2),greenpart(S2),0),S2) dashed evenly; trace segment((redpart(S2),greenpart(S2),0),(redpart(S2),0,0)) dashed withdots; trace segment((redpart(S2),greenpart(S2),0),(0,greenpart(S2),0)) dashed withdots; trace segment(O,S3); trace chemin(O,(redpart(S3),greenpart(S3),0),S3) dashed evenly; trace segment((redpart(S3),greenpart(S3),0),(redpart(S3),0,0)) dashed withdots; trace segment((redpart(S3),greenpart(S3),0),(0,greenpart(S3),0)) dashed withdots; trace (cercles(O,S2,O,S2,Normal(O,Normal(O,S2,S1),S2)) cutafter segment(S1,S1)) withpen pencircle scaled 2bp dashed evenly withcolor jaune; trace (cercles(O,S3,O,S3,Normal(O,Normal(O,S1,S3),S3)) cutbefore demidroite(99/100[S3,S1],S1)) withpen pencircle scaled 2bp dashed evenly withcolor rouge; trace (cercles(O,S3,O,S3,Normal(O,Normal(O,S3,S2),S3)) cutafter demidroite(99/100[S1,S2],S2)) withpen pencircle scaled 2bp dashed evenly withcolor bleu; finespace; %figure2

figureespace(-10u,-10u,10u,10u); Initialisation(5,22,20,750); path equa,pole; color O,A,B,N; O=(0,0,0); A=(1,0,0); B=(0,1,0); N=(0,0,1); equa=cercles(O,B,O,B,-A); fillcolor:=ciel; transparence equa; pole=cercles(O,B,O,B,N); color S[]; S1=(cosd(75)*cosd(40),sind(75)*cosd(40),sind(40)); S2=(cosd(15)*cosd(10),sind(15)*cosd(10),sind(10)); S3=(cosd(45)*cosd(65),sind(45)*cosd(65),sind(65)); drawoptions(withcolor gris); InitialiseParametre(-pi,pi,pi/30,-pi,pi,pi/30); FamilleDesCourbesEnU; FamilleDesCourbesEnV; drawoptions(); drawarrow segment(-B,B) dashed dashpattern(on12bp off6bp on3bp off6bp); drawarrow segment(-A,A) dashed dashpattern(on12bp off6bp on3bp off6bp); drawarrow segment(-N,N) dashed dashpattern(on12bp off6bp on3bp off6bp); marque_p:="plein"; pointe(S1,S2,S3); trace segment(O,S1); trace chemin(O,(redpart(S1),greenpart(S1),0),S1) dashed evenly; trace segment((redpart(S1),greenpart(S1),0),(redpart(S1),0,0)) dashed withdots; trace segment((redpart(S1),greenpart(S1),0),(0,greenpart(S1),0)) dashed withdots; trace segment(O,S2); trace chemin(O,(redpart(S2),greenpart(S2),0),S2) dashed evenly; trace segment((redpart(S2),greenpart(S2),0),(redpart(S2),0,0)) dashed withdots; trace segment((redpart(S2),greenpart(S2),0),(0,greenpart(S2),0)) dashed withdots; trace segment(O,S3); trace chemin(O,(redpart(S3),greenpart(S3),0),S3) dashed evenly; trace segment((redpart(S3),greenpart(S3),0),(redpart(S3),0,0)) dashed withdots; trace segment((redpart(S3),greenpart(S3),0),(0,greenpart(S3),0)) dashed withdots; trace (cercles(O,S2,O,S2,Normal(O,Normal(O,S2,S1),S2)) cutafter segment(S1,S1)) withpen pencircle scaled 2bp dashed evenly withcolor jaune; trace (cercles(O,S3,O,S3,Normal(O,Normal(O,S1,S3),S3)) cutbefore demidroite(99/100[S3,S1],S1)) withpen pencircle scaled 2bp dashed evenly withcolor rouge; trace (cercles(O,S3,O,S3,Normal(O,Normal(O,S3,S2),S3)) cutafter demidroite(99/100[S1,S2],S2)) withpen pencircle scaled 2bp dashed evenly withcolor bleu; finespace; %figure3

figureespace(-10u,-10u,10u,10u); Initialisation(5,22,20,750); path equa,pole; color O,A,B,N; O=(0,0,0); A=(1,0,0); B=(0,1,0); N=(0,0,1); equa=cercles(O,B,O,B,-A); fillcolor:=ciel; transparence equa; pole=cercles(O,B,O,B,N); color S[]; S1=(cosd(75)*cosd(40),sind(75)*cosd(40),sind(40)); S2=(cosd(15)*cosd(10),sind(15)*cosd(10),sind(10)); S3=(cosd(-45)*cosd(65),sind(-45)*cosd(65),sind(65)); drawoptions(withcolor gris); InitialiseParametre(-pi,pi,pi/30,-pi,pi,pi/30); FamilleDesCourbesEnU; FamilleDesCourbesEnV; drawoptions(); drawarrow segment(-B,B) dashed dashpattern(on12bp off6bp on3bp off6bp); drawarrow segment(-A,A) dashed dashpattern(on12bp off6bp on3bp off6bp); drawarrow segment(-N,N) dashed dashpattern(on12bp off6bp on3bp off6bp); marque_p:="plein"; pointe(S1,S2,S3); trace segment(O,S1); trace chemin(O,(redpart(S1),greenpart(S1),0),S1) dashed evenly; trace segment((redpart(S1),greenpart(S1),0),(redpart(S1),0,0)) dashed withdots; trace segment((redpart(S1),greenpart(S1),0),(0,greenpart(S1),0)) dashed withdots; trace segment(O,S2); trace chemin(O,(redpart(S2),greenpart(S2),0),S2) dashed evenly; trace segment((redpart(S2),greenpart(S2),0),(redpart(S2),0,0)) dashed withdots; trace segment((redpart(S2),greenpart(S2),0),(0,greenpart(S2),0)) dashed withdots; trace segment(O,S3); trace chemin(O,(redpart(S3),greenpart(S3),0),S3) dashed evenly; trace segment((redpart(S3),greenpart(S3),0),(redpart(S3),0,0)) dashed withdots; trace segment((redpart(S3),greenpart(S3),0),(0,greenpart(S3),0)) dashed withdots; trace (cercles(O,S2,O,S2,Normal(O,Normal(O,S2,S1),S2)) cutafter segment(S1,S1)) withpen pencircle scaled 2bp dashed evenly withcolor jaune; trace (cercles(O,S3,O,S3,Normal(O,Normal(O,S1,S3),S3)) cutbefore demidroite(99/100[S3,S1],S1)) withpen pencircle scaled 2bp dashed evenly withcolor rouge; trace (cercles(O,S3,O,S3,Normal(O,Normal(O,S3,S2),S3)) cutafter demidroite(99/100[S1,S2],S2)) withpen pencircle scaled 2bp dashed evenly withcolor bleu; finespace; %figure4

figureespace(-10u,-10u,10u,10u); Initialisation(5,22,20,750); path equa,pole; color O,A,B,N; O=(0,0,0); A=(1,0,0); B=(0,1,0); N=(0,0,1); equa=cercles(O,B,O,B,-A); fillcolor:=ciel; transparence equa; pole=cercles(O,B,O,B,N); color S[]; S1=(cosd(75)*cosd(40),sind(75)*cosd(40),sind(40)); S2=(cosd(15)*cosd(10),sind(15)*cosd(10),sind(10)); S3=(cosd(-45)*cosd(65),sind(-45)*cosd(65),sind(65)); drawoptions(withcolor gris); InitialiseParametre(-pi/2,-pi/10,pi/20,-pi,pi,pi/20); FamilleDesCourbesEnU; FamilleDesCourbesEnV; InitialiseParametre(0,pi/2,pi/20,pi/2,3*pi/2,pi/20); FamilleDesCourbesEnU; FamilleDesCourbesEnV; drawoptions(); drawarrow segment(-B,B) dashed dashpattern(on12bp off6bp on3bp off6bp); drawarrow segment(-A,A) dashed dashpattern(on12bp off6bp on3bp off6bp); drawarrow segment(-N,N) dashed dashpattern(on12bp off6bp on3bp off6bp); marque_p:="plein"; pointe(S1,S2,S3); trace segment(O,S1); trace chemin(O,(redpart(S1),greenpart(S1),0),S1) dashed evenly; trace segment((redpart(S1),greenpart(S1),0),(redpart(S1),0,0)) dashed withdots; trace segment((redpart(S1),greenpart(S1),0),(0,greenpart(S1),0)) dashed withdots; trace segment(O,S2); trace chemin(O,(redpart(S2),greenpart(S2),0),S2) dashed evenly; trace segment((redpart(S2),greenpart(S2),0),(redpart(S2),0,0)) dashed withdots; trace segment((redpart(S2),greenpart(S2),0),(0,greenpart(S2),0)) dashed withdots; trace segment(O,S3); trace chemin(O,(redpart(S3),greenpart(S3),0),S3) dashed evenly; trace segment((redpart(S3),greenpart(S3),0),(redpart(S3),0,0)) dashed withdots; trace segment((redpart(S3),greenpart(S3),0),(0,greenpart(S3),0)) dashed withdots; trace (cercles(O,S2,O,S2,Normal(O,Normal(O,S2,S1),S2)) cutafter segment(S1,S1)) withpen pencircle scaled 2bp dashed evenly withcolor jaune; trace (cercles(O,S3,O,S3,Normal(O,Normal(O,S1,S3),S3)) cutbefore demidroite(99/100[S3,S1],S1)) withpen pencircle scaled 2bp dashed evenly withcolor rouge; trace (cercles(O,S3,O,S3,Normal(O,Normal(O,S3,S2),S3)) cutafter demidroite(99/100[S1,S2],S2)) withpen pencircle scaled 2bp dashed evenly withcolor bleu; finespace; end
On peut certainement faire mieux (dans la gestion des intersections; en construisant une macro). [À suivre]