In[]:=
ArrayTrim[matrix_]:=Transpose[DeleteCases[Transpose[DeleteCases[matrix,{0..}]],{0..}]]
In[]:=
IterateAddSquare[matrix_]:=Module[{newMatrix,pos},newMatrix=ArrayPad[ArrayTrim[matrix],1];pos=Position[ArrayPad[ArrayTrim[matrix],1],1];Map[ArrayPad[First[Sort[ResourceFunction["ArrayRotations"][ArrayTrim[#]]]],1]&,Catenate[Outer[If[newMatrix[[Sequence@@(#1+#2)]]==0,ReplacePart[newMatrix,#1+#2->1],Nothing]&,pos,ReIm[Exp[IPi/2#]]&/@Range[4],1]]]]
In[]:=
PolyominoArrays[UpTo[weight_?Positive]]:=Map[ArrayTrim,NestList[Union[Catenate[IterateAddSquare/@#]]&,{ArrayPad[{{1}},1]},weight-1],{2}];
In[]:=
PolyominoArrays[weight_?Positive]:=Map[ArrayTrim,Nest[Union[Catenate[IterateAddSquare/@#]]&,{ArrayPad[{{1}},1]},weight-1]];
In[]:=
PolyominoArrays[3]
Out[]=
{{{1,1,1}},{{0,1},{1,1}}}
In[]:=
ArrayPlot/@PolyominoArrays[3]
Out[]=
,
In[]:=
ArrayPlot/@PolyominoArrays[5]
Out[]=
,
,
,
,
,
,
,
,
,
,
,
In[]:=
ResourceFunction["PolyominoPlot"]/@PolyominoArrays[5]
Out[]=
,
,
,
,
,
,
,
,
,
,
,
In[]:=
InputForm
Out[]//InputForm=
Graphics[{{GrayLevel[1], EdgeForm[GrayLevel[0]], {},
{GrayLevel[0], Polygon[{{1/2, 1/2}, {1/2, 3/2}, {3/2, 3/2}, {5/2, 3/2}, {5/2, 5/2}, {5/2, 7/2}, {7/2, 7/2}, {7/2, 5/2}, {7/2, 3/2}, {7/2, 1/2}, {5/2, 1/2},
{3/2, 1/2}} -> {}]}}, {GrayLevel[1], EdgeForm[GrayLevel[0]], {},
{GrayLevel[1], Polygon[{{1/2, 3/2}, {1/2, 5/2}, {1/2, 7/2}, {3/2, 7/2}, {5/2, 7/2}, {5/2, 5/2}, {5/2, 3/2}, {3/2, 3/2}} -> {}]}}}]
{GrayLevel[0], Polygon[{{1/2, 1/2}, {1/2, 3/2}, {3/2, 3/2}, {5/2, 3/2}, {5/2, 5/2}, {5/2, 7/2}, {7/2, 7/2}, {7/2, 5/2}, {7/2, 3/2}, {7/2, 1/2}, {5/2, 1/2},
{3/2, 1/2}} -> {}]}}, {GrayLevel[1], EdgeForm[GrayLevel[0]], {},
{GrayLevel[1], Polygon[{{1/2, 3/2}, {1/2, 5/2}, {1/2, 7/2}, {3/2, 7/2}, {5/2, 7/2}, {5/2, 5/2}, {5/2, 3/2}, {3/2, 3/2}} -> {}]}}}]
In[]:=
[[1]]
Out[]=
,EdgeForm,{},,Polygon,,EdgeForm,{},,Polygon
In[]:=
Cases[#[[1]],{_,_,_,_,{x_}}:>x,Infinity]&/@(ResourceFunction["PolyominoPlot"]/@PolyominoArrays[5])
Out[]=
Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon,Polygon
test1=Module{unit,init,res,steps=15,ct=0},SeedRandom[235234];unit=Polygon;init=AddCandidates[InitializePolygonAggregation[{unit},{Range[Length@@unit]},unit]];Monitor[res=NestWhileList[(ct++;RandomAddPolygon[#])&,init,!FailureQ[#]&,1,steps],ct];out=res;res=If[FailureQ[Last[res]],$Failed,FixGraphicsScale[10]@RandomAggregationGraphics[#]&/@res]
In[]:=
Polygon//InputForm
Out[]//InputForm=
Polygon[{{3/2, 1/2}, {3/2, 3/2}, {1/2, 3/2}, {1/2, 5/2}, {3/2, 5/2}, {5/2, 5/2}, {5/2, 7/2}, {7/2, 7/2}, {7/2, 5/2}, {7/2, 3/2}, {5/2, 3/2}, {5/2, 1/2}} -> {}]
Regular Polygons
Regular Polygons
Multiway Polypolyominoes
Multiway Polypolyominoes
Penrose tilings
Penrose tilings