(* Par Marcel Délèze  *)

BeginPackage["Tortue`"]

nouvelleLigne::usage="nouvelleLigne[position_List,direction] initialise une nouvelle ligne polygonale."

avance::usage="avance[distance] ajoute un nouveau segment de longueur distance."

tourne::usage="tourne[angle] modifie la direction courante."

ligne::usage="ligne[] retourne la liste des points."

arguments::usage="arguments[] retourne la liste des directions."

fermeLigne::usage="fermeLigne[] ferme le polygone."

bissectrIntG::usage="bissectrIntG[] retourne la liste des directions des bissectrices des angles intérieurs du côté gauche."

Begin["Private`"]

nouvelleLigne[pos_List,dir_]:=Module[{},
posCrt=pos;
ligneCrt={pos};
dirCrt=dir;
argCrt={dir};]

avance[d_]:=Module[{},posCrt=N[posCrt+d{Cos[dirCrt],Sin[dirCrt]}];AppendTo[ligneCrt,posCrt];posCrt]

tourne[α_]:=Module[{},dirCrt=N[dirCrt+α];
AppendTo[argCrt,dirCrt];dirCrt]

ligne[]:=ligneCrt

arguments[]:=argCrt

fermeLigne[]:=Module[{},tourne[Arg[(First[ligneCrt][[1]]-Last[ligneCrt][[1]])+I(First[ligneCrt][[2]]-Last[ligneCrt][[2]])]-dirCrt+2 π];AppendTo[ligneCrt,First[ligneCrt]];Last[ligneCrt]]

bissectrIntG[]:=Module[{aa,bi},aa=arguments[];bi=(1/2)(aa+π+RotateRight[aa]);bi[[1]]=bi[[1]]+π;bi]

End[]

EndPackage[]