//ketlib Divisor(n):=( regional(out,tmp); out=[]; forall(1..(round(sqrt(n))), if(mod(n,#)==0, tmp=round(n/#); out=concat(out,[#,tmp])); ); out=append(out,n); out; ); //figures Ketinit(); Setketcindyjs(["Nolbl=all","Axe=n"]);//no ketjs Ketcindyjsbody(["
Reflection"],[]); mm=2; nn=1; str="fr(2,1)"; //str=Textedit(50);// only ketjs tmp=indexof(str,"="); if(tmp>0, str=substring(str,tmp,length(str)); ); if(length(str)>0, if(indexof(str,".")>0, tmp=parse(str); str=Op(1,Fracform(tmp,5)); ); tmp=Tocindyform(str); tmp=Strsplit(tmp,"/"); tmp=apply(tmp,parse(#)); mm=round(tmp_1); nn=1; if(length(tmp)==2, nn=tmp_2; ); texm=Totexform(str); tmp1=NE.xy-[0,1]; tmp2=["Size=1.5"]; if(nn==1, Expr(tmp1,"nw","m="+text(mm),tmp2); , Expr(tmp1,"nw","m="+texm,tmp2); ); ); fun=Assign("m/n*x",["m",mm,"n",nn]); Plotdata("1",fun,"x=[-5,5]",["Num=1"]); tmp=remove((-4)..4,[0]); tmp=apply(tmp,[#,text(#)]); tmp=flatten(tmp); Htickmark(tmp); Vtickmark(tmp); Putpoint("P",[3,3],[P.x,P.y]); FP=apply(P.xy,Op(1,Fracform(#,5))); CP=apply(FP,Tocindyform(#)); PP=apply(CP,parse(#)); x1=PP_1; y1=PP_2; m=mm/nn; x2=(2*m*y1+(1-m^2)*x1)/(m^2+1); y2=((m^2-1)*y1+2*m*x1)/(m^2+1); PQ=[x2,y2]; GP=apply(FP,Totexform(#)); tmp=pairs([1,2,3,4,5]); tmp=concat(tmp,apply(1..5,[#,#])); tmp=apply(tmp,#_1*#_2); dvL=remove(Divisor(mm^2+nn^2),[1]); forall(dvL,dv, tmp=concat(tmp,apply(tmp,#*dv)); ); tmp=set(tmp); GQ=apply(PQ,Totexform(Op(1,Fracform(#,tmp)))); Pointdata("P",PP,["Size=3"]); Pointdata("Q",PQ,["Size=3"]); Listplot("1",[PP,PQ]); PM=(PP+PQ)/2; Pointdata("i",PM,["Size=3","Color=blue"]); Segmark("1",[PP,PM],["Type=2"]); Segmark("2",[PQ,PM],["Type=2"]); TGP="\mathrm{P}\displaystyle("+GP_1+","+GP_2+")"; TGQ="\mathrm{Q}\displaystyle("+GQ_1+","+GQ_2+")"; if(PP_2<=PQ_2, dP="n2e2"; dQ="n2w2"; , dP="n2w"; dQ="s2w"; ); Expr([PP,dP,TGP,PQ,dQ,TGQ],["Size=1.6"]); Expr(NE,"nw","y=mx",["Size=1.5"]); Windispg();