dottedline := proc(x,y,np); RETURN(plot([x[1]*(1-t)+y[1]*t,x[2]*(1-t)+y[2]*t,t=0..1], numpoints=np,style=POINT,symbol=POINT, args[4..nargs])); end: ZetaArc := proc() local X1,X2,s,u,d,m,y,z,s0,t0,t,a1,a2,ay,R,al,a,b; X1 := args[1]; X2 := args[2]; s := args[3]; u := [X2[1]-X1[1],X2[2]-X1[2]]; d := sqrt(u[1]^2+u[2]^2); s0 := s*d/2; u := [u[1]/d,u[2]/d]; m := [(X1[1]+X2[1])/2,(X1[2]+X2[2])/2]; y := [m[1]-s0*u[2],m[2]+s0*u[1]]; t0 := solve(t^2+d^2/4=(s0-t)^2,t); z := [m[1]-t0*u[2],m[2]+t0*u[1]]; z := evalf(z); R := sqrt((z[1]-X1[1])^2 +(z[2]-X1[2])^2); a1 := arctan((X1[2]-z[2]),(X1[1]-z[1])); a2 := arctan((X2[2]-z[2]),(X2[1]-z[1])); ay := arctan((y[2]-z[2]),(y[1]-z[1])); al := sort(evalf([a1,a2,ay])); if ay = al[1] then a :=al[3]-2*Pi; b := al[2]; elif ay = al[3] then a :=al[1]+2*Pi; b := al[2]; else a := al[1]; b := al[3]; fi; RETURN(arc(z,R,a..b,args[4..nargs])) end: midZetaArc := proc(X1,X2,s,v) local u,d,m,y,z,s0,t0,t,a1,a2,ay,R,al,a,b,v0; u := [X2[1]-X1[1],X2[2]-X1[2]]; d := sqrt(u[1]^2+u[2]^2); s0 := s*d/2; u := [u[1]/d,u[2]/d]; m := [(X1[1]+X2[1])/2,(X1[2]+X2[2])/2]; y := [m[1]-s0*u[2],m[2]+s0*u[1]]; t0 := solve(t^2+d^2/4=(s0-t)^2,t); z := [m[1]-t0*u[2],m[2]+t0*u[1]]; z := evalf(z); R := sqrt((z[1]-X1[1])^2 +(z[2]-X1[2])^2); a1 := arctan((X1[2]-z[2]),(X1[1]-z[1])); a2 := arctan((X2[2]-z[2]),(X2[1]-z[1])); ay := arctan((y[2]-z[2]),(y[1]-z[1])); al := sort(evalf([a1,a2,ay])); if ay = al[1] then a :=al[3]-2*Pi; b := al[2]; elif ay = al[3] then a :=al[1]+2*Pi; b := al[2]; else a := al[1]; b := al[3]; fi; v0 := a*(1-v)+b*v; RETURN([z[1]+R*cos(v0), z[2]+R*sin(v0)]); end: midline := proc(X1,X2,s) RETURN([X1[1]*(1-s)+X2[1]*s,X1[2]*(1-s)+X2[2]*s]); end: