(*Manta*)
(*Heesch nr 12 - type C3C3C6C6*)
rot60[xy_]:=(({{Cos[(π/3)], -Sin[(π/3)]}, {Sin[(π/3)], Cos[(π/3)]}})).xy;                                                        (* rotatie matrix 60 graden *)
Rot60[xylist_]:=rot60 /@xylist;
Rot120[xylist_]:=Rot60[Rot60[xylist]];                                               (* rotatie matrix 120 graden, 2 keer draaien om 60 *)
ROT60[xylistlist_]:= Rot60 /@xylistlist;
ROT120[xylistlist_]:=ROT60[ROT60[xylistlist]];

(* de basis punten van het object, deze staan vast en bepalen alle hoeken en draai hoeken*)
ptA={0, 13.8564};  (*bovenste punt van het figuur, hoofd vd rog*)
ptB ={-6, 10.3923}; (*linkse punt van het figuur, linker vin vd rog*)
ptC={6, 10.3923}; (* rechtse punt van het figuur, rechter vin vd rog *)
ptD={0,0}; (*staart punt van de rog*)
ptE = {0, 10.3923}; (*snijpunt vd lijn DA en BC*)

(* de translatie van de objecten over de vaste punten van het object *)
transED[xy_]:=xy+((ptE)-(ptD)+(ptE)-(ptD));  (*translatie van punt E naar punt D, ik verplaats punt E naar D*)
TransED[xylist_]:=transED /@ xylist;
TRANSED[xylistlist_]:=TransED /@ xylistlist;

transOD[xy_]:=xy+ptD; (*translatie van punt O naar punt D, ik verplaats punt 0 naar D*)
TransOD[xylist_]:=transOD /@ xylist;
TRANSOD[xylistlist_]:=TransOD /@ xylistlist;

transDO[xy_]:=xy-ptD;
TransDO[xylist_]:=transDO /@ xylist;
TRANSDO[xylistlist_]:=TransDO /@ xylistlist;

transBC[xy_]:=xy + (ptC - ptB); (*translatie van punt C naar punt B, ik verplaats punt C naar B*)
TransBC[xyList_] := transBC /@ xyList;
TRANSBC[xylistlist_]:=TransBC/@ xylistlist;

transAD[xy_]:=xy + (ptD - ptA);
TransAD[xyList_] := transAD /@ xyList;
TRANSAD[xylistlist_]:=TransAD/@ xylistlist;

transDA[xy_]:=xy + (ptA - ptD);
TransDA[xyList_] := transDA /@ xyList;
TRANSDA[xylistlist_]:=TransDA/@ xylistlist;

transBA[xy_]:=xy + (ptA - ptB);
TransBA[xyList_] := transBA /@ xyList;
TRANSBA[xylistlist_]:=TransBA/@ xylistlist;

transAB[xy_]:=xy + (ptB - ptA);
TransAB[xyList_] := transAB /@ xyList;
TRANSAB[xylistlist_]:=TransAB/@ xylistlist;

transDC[xy_]:=xy + (ptC - ptD);
TransDC[xyList_] := transDC /@ xyList;
TRANSDC[xylistlist_]:=TransDC/@ xylistlist;

transCD[xy_]:=xy + (ptD - ptC);
TransCD[xyList_] := transCD /@ xyList;
TRANSCD[xylistlist_]:=TransCD/@ xylistlist;

rog1={{0,0},{0.5, 1},{1,1.5},{1.2,2.5},{2,2.7}, {3.8,3.6},{3.2,5},{2.7,7}, {3,8.5}, {4,10.5}, {5,11} ,{6, 10.3923}}; (* de lijn die de punten vd lijn van D naar C aangeeft vd rog*)
rog2={{-6, 10.3923},{-4.5,10.5},{-3,11},{-2,12},{-1,13},{-1.5,13.8},{-0.5,13.5},{0.3,13}, {0, 13.8564}}; (* de lijn die de punten vd lijn van B naar A aangeeft vd rog*)
lijn1 = {{-6.2,10.3},{-6.8,9}}; (* de arcering lijnen vd rog*)
lijn2 = {{-5.6,10.3},{-6.4,8.5}};
lijn3 = {{-5.1,10.3},{-6.1,7.9}};
lijn4 = {{-4.3,10.4},{-5.6,7.0}};
lijn5 = {{-3.6,10.4},{-5,6.5}};
lijn6 = {{-2.3,11},{-4,6}};
({{lijn7 = {{-1.05,10},{-2.5,5.5}};}, {lijn8 = {{0.5,9.8},{-0.9,5.0}};
lijn9 = {{2.5,10.5},{-0.3,1.7}};
lijn10 = {{2.4,5.3},{1.5,3}};}})
oogl = Table [{(1/5)Cos[i(π/10)]+1.5, (1/5)Sin[i(π/10)]+12}, {i,1,21}]; (*cirkel, het linker ook, het eerste stuk is het creeeren van een cirkel, de + ... zijn de coordinanten vh oog in het opbject, {.,.,.} is het aantal stapjes om de cirkel rond te maken*)
oogr = Table [{(1/5)Cos[i(π/10)]-0.7, (1/5)Sin[i(π/10)]+11.9}, {i,1,21}]; (*cirkel*)
mond = Table [{(1/2)Cos[i(π/10)]+ 0.4, (1/3)Sin[i(π/10)]+11}, {i,1,21}]; (*cirkel, door cos waarde te varieren, een platte cirkel*)

(* Het roteren van lijndeel DC (rog1D) om punt D over hook van 60 graden
rog 2A is het draaien van lijnstuk BA over punt A, onder hoek van 120graden, dit om 1 deel v rog compleet te maken, verwijderd om dubbele lijnen te voorkomen*) 
(*rog1D=(#+ptD)& /@ Rot60[(#-ptD)& /@rog1];
rog2A=(#+ptA)& /@ Rot120[(#-ptA)& /@rog2];
*)
(*deel van het opbject moet geprint en andere gegraveerd worden, hier splitsing maken*)
gravure={oogl, oogr,mond, lijn1, lijn2, lijn3, lijn4,lijn5,lijn6,lijn7,lijn8,lijn9,lijn10};
cutting={rog1, rog2}; 

(* Het verplaatsen vd objecten onderling kan op verschillende manieren gebeuren, hieronder de minder nette manier, later gekozen om het netter op te lossen*)
(*
T1[xylistlist_]:=xylistlist;
T2[xylistlist_]:=ROT60[TRANSED[TRANSBC[ROT60[xylistlist]]]];*)
(*
T1[xylistlist_]:=TRANSED[xylistlist];
T2[xylistlist_]:=ROT60[TRANSED[TRANSBC[xylistlist]]];*)
(*
T1[xylistlist_]:=xylistlist;
T2[xylistlist_]:=ROT60[TRANSED[TRANSBC[ROT60[xylistlist]]]];
T3[xylistlist_]:=TRANSED[TRANSED[xylistlist]];
T4[xyListList_]:=TRANSBC[TRANSBC[TRANSBC[TRANSED[xyListList]]]];
*)
(* Op nette manier transleren van 2 objecten (1 object bevat 6 halve roggen), die schuin boven elkaar staan, zo mogelijk om ze netjes opzij en omhoog te plaatsen  *)

ROT60B[xylistlist_]:=TRANSOD[ROT60[TRANSDO[xylistlist]]]; (*roteren vh figuurtje om de oorsprong*)

T1[xylistlist_]:=xylistlist; (* gebeurd niets*)
T2[xylistlist_]:= TRANSED[TRANSBC[xylistlist]]; (* het tranleren over ED en over BC *)
T3[xyListList_]:=TRANSAB[TRANSBA[TRANSAD[TRANSAD[TRANSAD[xyListList]]]]]; (* het tranleren over AB, BA, AD, AD en AD dit om figuur compleet boven het andere figuur te plaatsen *)
T4[xyListList_]:=TRANSBC[TRANSBC[xyListList]]; (*translatie opzij*)

WW3:=Table[Line[Nest [T4, Nest[T3, Nest[T1,Nest[T2,Nest[ROT60B,cutting,i],j],k],l],m]],{i,0,5},{j,0,1},{k,0,0}, {l,0,6},{m,0,7}]; (* hierin communiceren de eerste delen, het weergeven vd tanslaties, en de laatse punten tussen de {i,0,5} het aantal stapjes, voor translatie i moet hij 6 stappen maken van 0 tot 5, dus steeds naast elkaar geplaatst*)
WW4:=Table[Line[Nest [T4, Nest[T3, Nest[T1,Nest[T2,Nest[ROT60B,gravure,i],j],k],l],m]],{i,0,5},{j,0,1},{k,0,0}, {l,0,6},{m,0,7}];

Show[Graphics[{Black, WW3, Red, WW4}]]
Export["finalmanta.eps",Show[Graphics[{Black, WW3, Red, WW4}]]]