<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="https://community.wolfram.com">
    <title>Community RSS Feed</title>
    <link>https://community.wolfram.com</link>
    <description>RSS Feed for Wolfram Community showing ideas tagged with Geometry sorted by most replies.</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2593151" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/463699" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/813449" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2153362" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1659553" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/932548" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2451238" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/870698" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2029621" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/863933" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1023763" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/953623" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1214169" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2858759" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2944810" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1561288" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1025180" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3545275" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2142619" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/418720" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2593151">
    <title>⭐ [R&amp;amp;DL] Wolfram R&amp;amp;D Developers on LIVE Stream</title>
    <link>https://community.wolfram.com/groups/-/m/t/2593151</link>
    <description>**Introducing our brand new YouTube channel, [Wolfram R&amp;amp;D][1]! Our channel features livestreams, behind-the-scenes creator presentations, insider videos, and more.**&#xD;
&#xD;
----------&#xD;
&#xD;
Join us for the unique Wolfram R&amp;amp;D livestreams on [Twitch][2] and [YouTube][3] led by our developers! &#xD;
&#xD;
You will see **LIVE** stream indicators on these channels on the dates listed below. The live streams provide tutorials and behind the scenes look at Mathematica and the Wolfram Language directly from developers.&#xD;
&#xD;
Join our livestreams every Wednesday at 11 AM CST and interact with developers who work on data science, machine learning, image processing, visualization, geometry, and other areas.&#xD;
&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
⭕ **UPCOMING** EVENTS&#xD;
&#xD;
&#xD;
- Jan 29 -- Reinforcement Learning Applied to Feedback Control with [Suba Thomas][61]&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
✅ **PAST** EVENTS  &#xD;
&#xD;
&#xD;
- April 24 -- [FeynCalc][60]&#xD;
- April 3 -- [Explore the Total Solar Eclipse of April 2024][59]&#xD;
- Mar 22 -- [20 Years of xAct Tensor Computer Algebra][58] &#xD;
- Feb 28 -- [Zero Knowledge Authentication][57]&#xD;
- Jan 17 -- [Nutrients by the Numbers][56]&#xD;
- Dec 13 -- [Understanding Graphics][55]&#xD;
- Oct 18 -- [Overview of Number Theory][54]&#xD;
- Sep 27 -- [QMRITools: Processing Quantitative MRI Data][52]&#xD;
- Sep 13 -- [Make High Quality Graph Visualization][51]&#xD;
- Sep 6 -- [Insider&amp;#039;s View of Graphs &amp;amp; Networks][53]&#xD;
- Aug 30 -- [Labeling Everywhere][49]&#xD;
- Aug 22 -- [Equation Generator for Equation-of-Motion Coupled Cluster Assisted by CAS][48]&#xD;
- Aug 16 -- [Foreign Function Interface][4]&#xD;
- July 26 -- [Modeling Fluid Circuits][6]&#xD;
- July 19 -- [Geocomputation][5]&#xD;
- July 5 -- [Protein Visualization][7]&#xD;
- Jun 14 -- [Chat Notebooks bring the power of Notebooks to LLMs][8]&#xD;
- May 31-- [Probability and Statistics: Random Sampling][9]&#xD;
- May 24 -- [Problem Solving][10]&#xD;
- May 17 -- [The state of Optimization][11]&#xD;
- May 10 -- [Building a video game with Wolfram notebooks][12]&#xD;
- April 26 -- [Control Systems: An Overview][13]&#xD;
- April 19 -- [MaXrd: A crystallography package developed for research support][14]&#xD;
- April 5th -- [Relational database in the Wolfram Language][15]&#xD;
- Mar 29th -- [Build your first game in the Wolfram Language with Unity game engine] [16]&#xD;
- Mar 22nd -- [Everything to know about Mellin-Barnes Integrals - Part II][17]&#xD;
- Mar 15th -- [Building your own Shakespearean GPT - a ChatGPT like GPT model][18]&#xD;
- Mar 8th -- [Understand Time, Date and Calendars][19]&#xD;
- Mar 1st -- [Introducing Astro Computation][20]&#xD;
- Feb 22nd -- [Latest features in System Modeler][21]&#xD;
- Feb 15th -- [Everything to know about Mellin-Barnes Integrals][22]&#xD;
- Feb 8th -- [Dive into Video Processing][23]&#xD;
- Feb 1st -- [PDE Modeling][24]&#xD;
- Jan. 25th -- [Ask Integration Questions to Oleg Marichev][25]&#xD;
- Jan. 18th -- [My Developer Tools][26]&#xD;
- Jan. 11th -- [Principles of Dynamic Interfaces][27]&#xD;
- Dec. 14th -- [Wolfram Resource System: Repositories &amp;amp; Archives][28]&#xD;
- Dec. 7th -- [Inner Workings of ImageStitch: Image Registration, Projection and Blending][29]&#xD;
- Nov. 30th -- [Q&amp;amp;A for Calculus and Algebra][30]&#xD;
- Nov. 23rd -- [xAct: Efficient Tensor Computer Algebra][31]&#xD;
- Nov. 16th -- [Latest in Machine Learning][32]&#xD;
- Nov. 9th -- [Computational Geology][33]&#xD;
- Nov. 2nd -- [Behind the Scenes at the Wolfram Technology Conference 2022][34]&#xD;
- Oct 26th -- [Group Theory Package (GTPack) and Symmetry Principles in Condensed Matter][35]&#xD;
- Oct 12th -- [Tree Representation for XML, JSON and Symbolic Expressions][36]&#xD;
- Oct. 5th -- [A Computational Exploration of Alcoholic Beverages][37]&#xD;
- Sept. 28th -- [Q&amp;amp;A with Visualization &amp;amp; Graphics Developers][38]&#xD;
- Sept. 14th -- [Paclet Development][39]&#xD;
- Sept. 7th -- [Overview of Chemistry][40]&#xD;
- Aug. 24th -- [Dive into Visualization][41]  &#xD;
- Aug. 17th -- [Latest in Graphics &amp;amp; Shaders][42]   &#xD;
- Aug. 10th -- [What&amp;#039;s new in Calculus &amp;amp; Algebra][43]   &#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&amp;gt; **What are your interests? Leave a comment here on this post to share your favorite topic suggestions for our livestreams.**  &#xD;
**Follow us on our live broadcasting channels [Twitch][44] and [YouTube][45] and for the up-to-date announcements on our social media: [Facebook][46] and [Twitter][47].**&#xD;
&#xD;
&#xD;
  [1]: https://wolfr.am/1eatWLcDA&#xD;
  [2]: https://www.twitch.tv/wolfram&#xD;
  [3]: https://wolfr.am/1eatWLcDA&#xD;
  [4]: https://www.youtube.com/watch?v=C82NHpy7D6k&#xD;
  [5]: https://community.wolfram.com/groups/-/m/t/2985580&#xD;
  [6]: https://community.wolfram.com/groups/-/m/t/2982197&#xD;
  [7]: https://community.wolfram.com/groups/-/m/t/2982114&#xD;
  [8]: https://youtu.be/ZqawtrWwE0c&#xD;
  [9]: https://community.wolfram.com/groups/-/m/t/2946101&#xD;
  [10]: https://community.wolfram.com/groups/-/m/t/2925156&#xD;
  [11]: https://community.wolfram.com/groups/-/m/t/2921756&#xD;
  [12]: https://community.wolfram.com/groups/-/m/t/2918746&#xD;
  [13]: https://community.wolfram.com/groups/-/m/t/2917597&#xD;
  [14]: https://community.wolfram.com/groups/-/m/t/2911327&#xD;
  [15]: https://community.wolfram.com/groups/-/m/t/2907390&#xD;
  [16]: https://community.wolfram.com/groups/-/m/t/2921593&#xD;
  [17]: https://community.wolfram.com/groups/-/m/t/2861119&#xD;
  [18]: https://community.wolfram.com/groups/-/m/t/2847286&#xD;
  [19]: https://community.wolfram.com/groups/-/m/t/2851575&#xD;
  [20]: https://community.wolfram.com/groups/-/m/t/2852934&#xD;
  [21]: https://community.wolfram.com/groups/-/m/t/2842136&#xD;
  [22]: https://community.wolfram.com/groups/-/m/t/2838335&#xD;
  [23]: https://community.wolfram.com/groups/-/m/t/2827166&#xD;
  [24]: https://community.wolfram.com/groups/-/m/t/2823264&#xD;
  [25]: https://community.wolfram.com/groups/-/m/t/2821053&#xD;
  [26]: https://youtu.be/istKGqpDUsw&#xD;
  [27]: https://community.wolfram.com/groups/-/m/t/2777853&#xD;
  [28]: https://youtu.be/roCkXVkDuLA&#xD;
  [29]: https://youtu.be/pYHAz-NatXI&#xD;
  [30]: https://youtu.be/r7Hjdr_D7c4&#xD;
  [31]: https://community.wolfram.com/groups/-/m/t/2713818&#xD;
  [32]: https://community.wolfram.com/groups/-/m/t/2705779&#xD;
  [33]: https://community.wolfram.com/groups/-/m/t/2701172&#xD;
  [34]: https://youtu.be/UrM-OBu3H9o&#xD;
  [35]: https://community.wolfram.com/groups/-/m/t/2678940&#xD;
  [36]: https://community.wolfram.com/groups/-/m/t/2649407&#xD;
  [37]: https://community.wolfram.com/groups/-/m/t/2635049&#xD;
  [38]: https://community.wolfram.com/groups/-/m/t/2618033&#xD;
  [39]: https://community.wolfram.com/groups/-/m/t/2616863&#xD;
  [40]: https://community.wolfram.com/groups/-/m/t/2613617&#xD;
  [41]: https://community.wolfram.com/groups/-/m/t/2605432&#xD;
  [42]: https://community.wolfram.com/groups/-/m/t/2600997&#xD;
  [43]: https://community.wolfram.com/groups/-/m/t/2596451&#xD;
  [44]: https://www.twitch.tv/wolfram&#xD;
  [45]: https://wolfr.am/1eatWLcDA&#xD;
  [46]: https://www.facebook.com/wolframresearch&#xD;
  [47]: https://twitter.com/WolframResearch&#xD;
  [48]: https://www.youtube.com/live/ElP55ZILxPw?si=nsAPOQ3u-RbvuGKX&#xD;
  [49]: https://community.wolfram.com/groups/-/m/t/3007543&#xD;
  [50]: https://community.wolfram.com/web/charlesp&#xD;
  [51]: https://community.wolfram.com/groups/-/m/t/3019288&#xD;
  [52]: https://www.youtube.com/live/KM1yWHRrF2k?si=g2R7rHB2IinVRpo6&#xD;
  [53]: https://community.wolfram.com/groups/-/m/t/3009184&#xD;
  [54]: https://community.wolfram.com/groups/-/m/t/3064700&#xD;
  [55]: https://community.wolfram.com/groups/-/m/t/3084291&#xD;
  [56]: https://community.wolfram.com/groups/-/m/t/3104670&#xD;
  [57]: https://community.wolfram.com/groups/-/m/t/3164204&#xD;
  [58]: https://youtube.com/playlist?list=PLdIcYTEZ4S8TSEk7YmJMvyECtF-KA1SQ2&amp;amp;si=paXZHs0ZzGdB7y1y&#xD;
  [59]: https://youtube.com/playlist?list=PLdIcYTEZ4S8RyjEB7JSAsGerbYHl5xXeJ&amp;amp;si=xkNtkIDvKHFWHVmD&#xD;
  [60]: https://youtu.be/KUWK19Gx2LE?si=qbKISbL8FtvweSWo&#xD;
  [61]: https://community.wolfram.com/web/subat</description>
    <dc:creator>Charles Pooh</dc:creator>
    <dc:date>2022-08-05T21:37:19Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/463699">
    <title>Biggest Little Polyhedra</title>
    <link>https://community.wolfram.com/groups/-/m/t/463699</link>
    <description>The [biggest little polygon][1] is the *n*-gon with maximum diameter 1 that has the greatest volume.&#xD;
&#xD;
I&amp;#039;ve often wondered the same problem about polyhedra, and posted a [biggest little polyhedron][2] question on StackExchange, where it got no answers. &#xD;
&#xD;
*Mathematica* 10 has Volume[] and ConvexHullMesh[].  Calculating the volume of the convex hull of 20 random points is as simple as &#xD;
&#xD;
    Volume[ConvexHullMesh[RandomReal[{-1, 1}, {20, 3}]]] &#xD;
&#xD;
so I decided to solve the problem myself. First, I used some code like the below to find the solution randomly, with a bit of anealling.&#xD;
&#xD;
    numpts = 5; maxvol = .05; count = 0; div = 1;  &#xD;
    pts = RandomReal[{-1, 1}, {numpts, 3}];   &#xD;
    Monitor[Do[  &#xD;
      kk = RandomReal[{-1, 1}, {numpts, 3}]/div + pts;  &#xD;
      maxlen = Max[EuclideanDistance[#[[1]], #[[2]]] &amp;amp; /@ Subsets[kk, {2}]];  &#xD;
      vol = Volume[ConvexHullMesh[kk/maxlen]];  &#xD;
      If[vol &amp;gt; maxvol, count = 0; maxvol = vol; pts = kk/maxlen, count = count + 1];  &#xD;
      If[count &amp;gt; 1000, count = 0; div = 1.3 div; Print[{maxvol, pts}]],  &#xD;
    {gg, 1, 100000}], {count, maxvol, pts}]&#xD;
&#xD;
The best solution for 4 points is the regular tetrahedron with edge lengths 1.  The best solutions I could find for 5 through 12 points were considerably stranger. Red lines indicate a distance of 1. Volumes appear underneath.&#xD;
&#xD;
![biggest little polyhedra][3]&#xD;
&#xD;
Most of these solutions could doubtlessly be improved or made more exact. If anyone can provide any improvements, please post them.&#xD;
&#xD;
  [1]: http://mathworld.wolfram.com/BiggestLittlePolygon.html &amp;#034;biggest little polygon&amp;#034;&#xD;
  [2]: http://math.stackexchange.com/questions/434002/biggest-little-polyhedron &amp;#034;biggest little polyhedron&amp;#034;&#xD;
  [3]: /c/portal/getImageAttachment?filename=10774biggestlittlepolyhedron.jpg&amp;amp;userId=21530</description>
    <dc:creator>Ed Pegg</dc:creator>
    <dc:date>2015-03-20T20:16:46Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/813449">
    <title>How to Lego-fy your plots and 3D models...</title>
    <link>https://community.wolfram.com/groups/-/m/t/813449</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&#xD;
The other day I was thinking, could I make a certain plot in Lego? Well, Let&amp;#039;s start at the start and make a simple n*m lego-brick. The basic measurements are:&#xD;
&#xD;
    brickstyle=Sequence[Red,EdgeForm[AbsoluteThickness[1]]];&#xD;
    gropts=Sequence[Boxed-&amp;gt;False,ViewVector-&amp;gt;(10{2.4, -1.3, 2.}),ViewAngle-&amp;gt;8*Degree];&#xD;
    dims={dimx,dimy,dimz}={8.0,8.0,9.6}/8; (* size of a unit cell in lego-world *)&#xD;
    knobd=4.8/8; (* knob diameter *)&#xD;
    knobh=1.8/8; (* knob height *)&#xD;
    botdi=4.8/8; (* bottom pillar inner diameter*)&#xD;
    botdo=6.51/8; (* bottom pillar outer diameter*)&#xD;
    wall=1.2/8; (* wall thickness*)&#xD;
    thickness=1.0/8; (* top thickness *)&#xD;
&#xD;
And here a function that will make simple brick:&#xD;
&#xD;
    ClearAll[DrawLego]&#xD;
    DrawLego[{nx_Integer,ny_Integer,nz_Integer:1},detailed:(True|False|None):True]:=Module[{ptsout,ptsin,sides,bottom,rimi,rimo,knobs,knobs2},&#xD;
        ptsout=Tuples[{{0,0,0},{nx,ny,nz}dims}\[Transpose]];&#xD;
        ptsin=Tuples[{{wall,wall,0},{nx,ny,nz}dims-{wall,wall,thickness}}\[Transpose]];&#xD;
        sides=If[BooleanQ[detailed],If[TrueQ[detailed],{ptsin,ptsout},{ptsout}],{ptsout}];&#xD;
        sides=GraphicsComplex[#,{Polygon[{1,2,6,5}],Polygon[{3,4,8,7}],Polygon[{1,2,4,3}],Polygon[{5,6,8,7}],Polygon[{2,4,8,6}]}]&amp;amp;/@sides;&#xD;
        If[TrueQ[detailed],&#xD;
            ptsout=Tuples[{{0,0,0},{nx,ny,0}dims}\[Transpose]];&#xD;
            ptsin=Tuples[{{wall,wall,0},{nx,ny,nz}dims-{wall,wall,thickness}}\[Transpose]];&#xD;
            rimo=ptsout[[1;;;;2]][[{1,3,4,2}]];&#xD;
            rimi=ptsin[[1;;;;2]][[{1,3,4,2}]];&#xD;
            rimo=Partition[rimo,2,1,1];&#xD;
            rimi=Partition[rimi,2,1,1];&#xD;
            bottom=MapThread[Polygon[#1~Join~Reverse[#2]]&amp;amp;,{rimo,rimi}];&#xD;
        ];&#xD;
        If[BooleanQ[detailed],&#xD;
            knobs=Tuples[Range[1,#]&amp;amp;/@({nx,ny})]-1/2;&#xD;
            knobs=Cylinder[{Append[#{dimx,dimy},nz dimz],Append[#{dimx,dimy},nz dimz+knobh]}&amp;amp;/@knobs,knobd/2];&#xD;
        ];&#xD;
        If[TrueQ[detailed],&#xD;
            knobs2=Tuples[Range[1,#]&amp;amp;/@({nx,ny}-1)];&#xD;
            knobs2=Tube[{Append[#{dimx,dimy},0],Append[#{dimx,dimy},nz dimz-thickness]}&amp;amp;/@knobs2,botdo/2];&#xD;
        ];&#xD;
        If[BooleanQ[detailed],&#xD;
            If[TrueQ[detailed],&#xD;
                {sides,bottom,knobs,{CapForm[None],knobs2}}&#xD;
            ,&#xD;
                {sides,knobs}&#xD;
            ]&#xD;
            ,&#xD;
            {sides}&#xD;
        ]&#xD;
    ]&#xD;
    DrawLego[{nx_Integer,ny_Integer,nz_Integer:1},p:{px_,py_,pz_},detailed_:True]:=Translate[DrawLego[{nx,ny,nz},detailed],p{1,1,dimz}-{0.5,0.5,0}]&#xD;
&#xD;
So we can draw any brick now, at any place, and we have the option to have it detailed or not...&#xD;
&#xD;
    Graphics3D[{brickstyle, DrawLego[{4, 2}]}, Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;, Boxed -&amp;gt; False, Axes -&amp;gt; True]&#xD;
    Graphics3D[{brickstyle, DrawLego[{4, 2, 1}]}, Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;, Boxed -&amp;gt; False, Axes -&amp;gt; True]&#xD;
    Graphics3D[{brickstyle, DrawLego[{4, 2, 1}, {1, 1, 1}]}, Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;, Boxed -&amp;gt; False, Axes -&amp;gt; True]&#xD;
    Graphics3D[{brickstyle, DrawLego[{4, 2, 1}, {1, 1, 1}, False]}, Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;, Boxed -&amp;gt; False, Axes -&amp;gt; True]&#xD;
    Graphics3D[{brickstyle, DrawLego[{4, 2, 1}, {1, 1, 1}, None]}, Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;, Boxed -&amp;gt; False, Axes -&amp;gt; True]&#xD;
&#xD;
giving:&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
&#xD;
So now that we can &amp;#039;plot&amp;#039; any brick we can make a function that will cover a layer in brick-world with bricks of decreasingly smaller sizes iteratively, and will alternately go in the horizontal x and y directions:&#xD;
&#xD;
    ClearAll[TileWithLego,CreateLegos,TransformLego]&#xD;
    TileWithLego[slice_List/;MatrixQ[slice],sizes_List,greedy:(True|False),bricks_List:{}]:=Module[{size,bounds,sizex,sizey,shift,dims,dimx,dimy,greedy\[Lambda],stepi,stepj,newarr,part,newbricks},&#xD;
        size={sizex,sizey}=First[sizes];&#xD;
        dims={dimy,dimx}=Dimensions[newarr=slice];&#xD;
        shift=Floor[First[size]/2];&#xD;
        {stepi,stepj}=If[greedy,{1,1},{sizex,sizey}];&#xD;
        greedy\[Lambda]=Boole[!greedy];&#xD;
        newbricks=Reap[Do[&#xD;
            bounds={{j,j+sizey-1},{i,i+sizex-1}};&#xD;
            part=Take[newarr,##]&amp;amp;@@bounds;&#xD;
            If[Total[part,2]===sizex sizey,&#xD;
                newarr[[Span@@bounds[[1]],Span@@bounds[[2]]]]=0;&#xD;
                Sow[bounds];&#xD;
            ]&#xD;
            ,&#xD;
            {j,1,dimy-sizey+1,stepj}&#xD;
            ,&#xD;
            {i,1+greedy\[Lambda] Mod[(j-1)/sizey,2]shift,dimx-sizex+1,stepi}&#xD;
        ]][[2]];&#xD;
        If[newbricks==={},newbricks={{}}];&#xD;
        newbricks=bricks~Join~newbricks[[1]];&#xD;
        If[Length[sizes]&amp;gt;1,&#xD;
            TileWithLego[newarr,Rest[sizes],greedy,newbricks]&#xD;
        ,&#xD;
            Reverse/@newbricks&#xD;
        ]&#xD;
    ]&#xD;
    CreateLegos[slice_List/;MatrixQ[slice],sizes_List,rotate:(True|False),greedy:(True|False)]:=If[rotate,Reverse/@TileWithLego[slice\[Transpose],sizes,greedy],TileWithLego[slice,sizes,greedy]]&#xD;
    TransformLego[slices_List,bricks_List,greedy:(True|False|Automatic)]:=Module[{len,greedies,heights,rotates,brickies,brickspec},&#xD;
        len=Length[slices];&#xD;
        heights=Range[len];&#xD;
        rotates=(#=!=0)&amp;amp;/@Mod[heights,2];&#xD;
        greedies=Switch[greedy,True,ConstantArray[True,len],False,ConstantArray[False,len],_,Switch[len,1,{False},2,{False,False},_,{False,False}~Join~ConstantArray[True,len-2]]];&#xD;
        brickies=MapThread[CreateLegos[#1,bricks,#2,#3]&amp;amp;,{slices,rotates,greedies}];&#xD;
        brickspec=MapThread[{#1[[All,All,2]]-#1[[All,All,1]]+1,{#1[[All,All,1]],ConstantArray[#2,Length[#1]]}\[Transpose]}\[Transpose]&amp;amp;,{brickies,heights}];&#xD;
        brickspec=Catenate[brickspec];&#xD;
        brickspec[[All,2]]=Flatten/@brickspec[[All,2]];&#xD;
        brickies=DrawLego[#1,#2,False (* detailed *)]&amp;amp;@@@brickspec;&#xD;
        {Graphics3D[{brickstyle,brickies},Boxed-&amp;gt;False,ImageSize-&amp;gt;700],brickspec}&#xD;
    ]&#xD;
&#xD;
Let&amp;#039;s turn a simple plot in to its Lego-presentation: &#xD;
&#xD;
    heightmap=Table[8+Round[3.5Sin[0.1(0.1x^2+y)]/1.2],{x,-15,24,2},{y,-30,28,2}];&#xD;
    ListPlot3D[%,Mesh-&amp;gt;None,InterpolationOrder-&amp;gt;0]&#xD;
    minmax=MinMax[heightmap]+0.5{-1,1};&#xD;
    slices=UnitStep[heightmap-#+1]&amp;amp;/@Range@@minmax;&#xD;
    {gr,bricks}=TransformLego[slices,{{4,2},{3,2},{2,2},{4,1},{3,1},{2,1},{1,1}},Automatic];&#xD;
    gr&#xD;
    &#xD;
giving:&#xD;
    &#xD;
![enter image description here][3]&#xD;
![enter image description here][4]&#xD;
&#xD;
We can try different shapes, namely a sphere:&#xD;
&#xD;
    slices=DiskMatrix[{9/dimz,9,9},20];&#xD;
    {gr,bricks}=TransformLego[slices,{{4,2},{3,2},{2,2},{4,1},{3,1},{2,1},{1,1}},Automatic];&#xD;
    gr&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
Or a pyramid:&#xD;
&#xD;
    slices=DiamondMatrix[{8,8,8},18][[10;;]];&#xD;
    {gr,bricks}=TransformLego[slices,{{4,2},{3,2},{2,2},{4,1},{3,1},{2,1},{1,1}},Automatic];&#xD;
    gr&#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
The price (according to the online lego shop), would be:&#xD;
&#xD;
&#xD;
    prices = {{2, 4} -&amp;gt; 0.23, {1, 2} -&amp;gt; 0.11, {1, 1} -&amp;gt; 0.08, {1, 3} -&amp;gt; 0.15, {1, 4} -&amp;gt; 0.15, {2, 2} -&amp;gt; 0.15, {2, 3} -&amp;gt; 0.19};&#xD;
    Total[(Sort /@ bricks[[All, 1]]) /. prices]&#xD;
    18.76&#xD;
&#xD;
&#xD;
We can go now and make some instructions for making this pyramid! Because I can&amp;#039;t build something without instructions. Let&amp;#039;s create some layer-by-layer instructions:&#xD;
&#xD;
    ClearAll[CreatePage,CreatePages]&#xD;
    CreatePage[slices_List,pagenumber_Integer]:=Module[{add,old,image,gr,gr3,opts,width=500},&#xD;
        {add,old}=TakeDrop[slices,-1];&#xD;
        image=(DrawLego[#1,#2,False]&amp;amp;@@@#)&amp;amp;/@slices;&#xD;
        add=Flatten[add,1];&#xD;
        add=SortBy[Minus@*First][Reverse/@Tally[Sort/@add[[All,1]]]];&#xD;
        add[[All,1]]=Style[Row[{#,&amp;#034;\[Cross]&amp;#034;}],16,Black]&amp;amp;/@add[[All,1]];&#xD;
        add[[All,2]]=Graphics3D[{brickstyle,DrawLego[#]},gropts,ImageSize-&amp;gt;50,Background-&amp;gt;None]&amp;amp;/@add[[All,2]];&#xD;
        add=Grid[add];&#xD;
        gr3=Graphics3D[{brickstyle,image},Boxed-&amp;gt;False,ViewPoint-&amp;gt;(10{2.4, -1.3, 2.}),ImageSize-&amp;gt;2width/3];&#xD;
        gr=Graphics[&#xD;
            {LightBlue,Rectangle[{0,0},{1,1.5}],&#xD;
            Inset[gr3,Scaled@{0.5,0.5}],&#xD;
            Inset[Style[ToString[pagenumber],30,Black],Scaled@{0.5,0.05},Scaled@{0.5,0}],&#xD;
            Inset[add,Scaled@{0.05,1},Scaled@{0,1}]&#xD;
            },&#xD;
            Axes-&amp;gt;False,&#xD;
            Frame-&amp;gt;False,&#xD;
            ImageSize-&amp;gt;(width{1,1.5}),&#xD;
            PlotRange-&amp;gt;{{0,1},{0,1.5}},&#xD;
            AspectRatio-&amp;gt;Full&#xD;
        ]&#xD;
    ]&#xD;
    CreatePages[bricks_List]:=Module[{brickslices,out},&#xD;
        brickslices=SortBy[Part[#,1,-1,-1]&amp;amp;][GatherBy[bricks,Part[#,-1,-1]&amp;amp;]];&#xD;
        out = Map[CreatePage[brickslices[[;;#]],#]&amp;amp;,Range[Length[brickslices]]];&#xD;
        Rasterize[#,&amp;#034;Image&amp;#034;]&amp;amp; /@ out&#xD;
    ]&#xD;
&#xD;
So let&amp;#039;s call the function:&#xD;
&#xD;
    CreatePages[bricks]&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
gives me back 8 pages of instructions, including the bricks I need for that &amp;#039;layer&amp;#039; !&#xD;
&#xD;
Lastly, let&amp;#039;s make one from a 3D model:&#xD;
&#xD;
    brickstyle=Sequence[RGBColor[0.55,0.38,0.19],EdgeForm[AbsoluteThickness[1]]];&#xD;
    bg=ExampleData[{&amp;#034;Geometry3D&amp;#034;,&amp;#034;Triceratops&amp;#034;},&amp;#034;BoundaryMeshRegion&amp;#034;]&#xD;
    bounds={xbounds,ybounds,zbounds}=CoordinateBounds[ExampleData[{&amp;#034;Geometry3D&amp;#034;,&amp;#034;Triceratops&amp;#034;},&amp;#034;VertexData&amp;#034;]];&#xD;
    rmf=RegionMember[bg];&#xD;
    &#xD;
    \[Delta]=2^-3;&#xD;
    alldata=Boole[Table[rmf[{x,y,z}],{x,xbounds[[1]],xbounds[[2]],\[Delta]},{y,ybounds[[1]],ybounds[[2]],\[Delta]},{z,zbounds[[1]],zbounds[[2]],\[Delta]}]];&#xD;
    alldata=Transpose[alldata,{3,2,1}];&#xD;
    &#xD;
    {gr,bricks}=TransformLego[alldata,{{4,2},{3,2},{2,2},{4,1},{3,1},{2,1},{1,1}},False];&#xD;
    gr&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
Now feel free to turn your own plots, 3d-scans, and models to Legos!&#xD;
&#xD;
![enter image description here][9]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ezgif-7-d6220bc85b47.gif&amp;amp;userId=11733&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=106061.png&amp;amp;userId=73716&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=39362.png&amp;amp;userId=73716&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=65983.png&amp;amp;userId=73716&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=15884.png&amp;amp;userId=73716&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=73285.png&amp;amp;userId=73716&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=16926.png&amp;amp;userId=73716&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=18467.png&amp;amp;userId=73716&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=3141out.gif&amp;amp;userId=73716</description>
    <dc:creator>Sander Huisman</dc:creator>
    <dc:date>2016-02-29T21:57:12Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2153362">
    <title>3D Helmholtz resonance in the violin body with f-holes</title>
    <link>https://community.wolfram.com/groups/-/m/t/2153362</link>
    <description>*Wolfram notebook is attached at the end of the post.*&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
![enter image description here][1]&#xD;
&#xD;
This post is about FEM simulation of violin vibration modes in 3D. As well known there are Helmholtz resonances of air inside the violin body with frequencies dependent on geometry of f-holes. This is the main reason why violin has so pronounced sound. To simulate these modes with Mathematica FEM we first define the body geometry (this is my design with given volume and area of f-holes, but it taken from the real violin):&#xD;
&#xD;
    xy = {{3.805405405405406`,3.34954954954955`},{3.8252252252252257`,6.6990990990991`},{3.9441441441441443`,7.9081081081081095`},&#xD;
    {4.47927927927928`,8.601801801801802`},{5.014414414414414`,8.264864864864865`},{4.816216216216216`,7.8882882882882885`},&#xD;
    {4.895495495495496`,7.630630630630631`},{5.232432432432433`,7.432432432432433`},{5.47027027027027`,7.491891891891892`},&#xD;
    {5.648648648648649`,7.8882882882882885`},{5.668468468468468`,8.046846846846847`},{5.56936936936937`,8.403603603603605`},&#xD;
    {5.252252252252252`,8.681081081081082`},{4.855855855855856`,8.780180180180182`},{4.518918918918919`,8.8`},&#xD;
    {3.9639639639639643`,8.522522522522523`},{3.567567567567568`,7.967567567567568`},{3.3693693693693696`,7.372972972972973`},&#xD;
    {3.2306306306306305`,6.67927927927928`},{3.1513513513513516`,3.3693693693693696`},{3.1513513513513516`,2.655855855855856`},&#xD;
    {2.9729729729729732`,1.783783783783784`},{2.8738738738738743`,1.4666666666666668`},{2.100900900900901`,0.7927927927927928`},&#xD;
    {1.7243243243243245`,1.3081081081081083`},{2.021621621621622`,1.7639639639639642`},{2.0414414414414415`,2.0414414414414415`},&#xD;
    {1.9621621621621623`,2.23963963963964`},{1.6648648648648652`,2.4378378378378383`},{1.4666666666666668`,2.5171171171171176`},&#xD;
    {1.10990990990991`,2.338738738738739`},{0.891891891891892`,1.9423423423423425`},{0.9315315315315316`,1.4072072072072073`},&#xD;
    {1.5657657657657658`,0.7927927927927928`},{2.081081081081081`,0.6342342342342343`},{2.5963963963963965`,0.7927927927927928`},&#xD;
    {3.0918918918918923`,1.2090090090090093`},{3.5081081081081082`,1.902702702702703`},{3.706306306306306`,2.6954954954954955`}};&#xD;
    &#xD;
    reg1 = RegionUnion[Disk[{0, 19.5/2}, 19.5/2], &#xD;
      Disk[{0, 36 - 15.5/2}, 15.5/2], &#xD;
      Rectangle[{-10, 15}, {10, 25}]]; reg2 = &#xD;
     RegionDifference[reg1, &#xD;
      RegionUnion[Disk[{-10, 20}, 9.5/2], Disk[{10, 20}, 9.5/2]]];&#xD;
    c0 = {0, 36 - 15.5/2}; c1 = {7.03562, 25}; &#xD;
    f[x_] := c0[[2]] + x (c1[[2]] - c0[[2]])/(c1[[1]] - c0[[1]]); r1 = &#xD;
     Norm[c1 - {10, f[10]}];&#xD;
    reg3 = RegionDifference[reg2, Disk[{10, f[10]}, r1]]; &#xD;
    f1[x_] := c0[[2]] - x (c1[[2]] - c0[[2]])/(c1[[1]] - c0[[1]]);&#xD;
    reg4 = RegionDifference[reg3, Disk[{-10, f1[-10]}, r1]]; c10 = {0, &#xD;
      19.5/2}; c11 = {8.215838362577491`, 15}; &#xD;
    f11[x_] := c10[[2]] + x (c11[[2]] - c10[[2]])/(c11[[1]] - c10[[1]]);&#xD;
    r2 = Norm[c11 - {10, f11[10]}];&#xD;
    reg5 = RegionDifference[reg4, Disk[{10, f11[10]}, r2]]; &#xD;
    f12[x_] := c10[[2]] - x (c11[[2]] - c10[[2]])/(c11[[1]] - c10[[1]]);&#xD;
    reg6 = RegionDifference[reg5, Disk[{-10, f12[-10]}, r2]]; p6 = &#xD;
     RegionPlot[reg6, AspectRatio -&amp;gt; Automatic];&#xD;
    fh[xf_, yf_] := &#xD;
      RegionUnion[&#xD;
       Polygon[Table[{xy[[i, 1]] - xf, xy[[i, 2]] + yf}, {i, &#xD;
          Length[xy]}]], &#xD;
       Polygon[Table[{-xy[[i, 1]] + xf, xy[[i, 2]] + yf}, {i, &#xD;
          Length[xy]}]]];&#xD;
General view of the violin body from the front and back side&#xD;
&#xD;
    Show[p6, Graphics[fh[7, 12], AspectRatio -&amp;gt; Automatic]] &#xD;
    dz = 3.79; reg8 = &#xD;
     ImplicitRegion[Element[{x, y}, reg6] &amp;amp;&amp;amp; 0 &amp;lt;= z &amp;lt;= dz, {x, y, z}];&#xD;
    mesh3d1 = DiscretizeRegion[reg8, {{-10, 10}, {0, 36}, {0, dz}}]&#xD;
    &#xD;
 ![Figure 1][2]   &#xD;
Next step is the computation of air modes in the violin body with using ` NDEigensystem[]` as follows &#xD;
&#xD;
    ca = 34321(*T=20C*); L = -Laplacian[u[x, y, z], {x, y, z}]; {vals, funs} = &#xD;
    NDEigensystem[{L, &#xD;
    DirichletCondition[u[x, y, z] == 0, &#xD;
    Element[{x, y}, fh[7, 11.49]] &amp;amp;&amp;amp; z == dz]}, u, &#xD;
    Element[{x, y, z}, mesh3d1], 15];&#xD;
&#xD;
 Finally we visualize  first 5 modes and the main mode in 3D &#xD;
&#xD;
    {Table[DensityPlot[funs[[i]][x, y, dz/2], {x, -10, 10}, {y, 0, 36}, &#xD;
      PlotRange -&amp;gt; All, PlotLabel -&amp;gt; ca Sqrt[vals[[i]]]/(2 Pi), &#xD;
      ColorFunction -&amp;gt; &amp;#034;Rainbow&amp;#034;, AspectRatio -&amp;gt; Automatic], {i, 1, &#xD;
      5}],&#xD;
     DensityPlot3D[&#xD;
     funs[[1]][x, y, z], {x, -10, 10}, {y, 0, 36}, {z, 0, dz}, &#xD;
     PlotRange -&amp;gt; All, PlotLabel -&amp;gt; ca Sqrt[vals[[1]]]/(2 Pi), &#xD;
     ColorFunction -&amp;gt; &amp;#034;Rainbow&amp;#034;, AspectRatio -&amp;gt; Automatic, &#xD;
     PlotLegends -&amp;gt; Automatic, PlotPoints -&amp;gt; 100, BoxRatios -&amp;gt; Automatic, &#xD;
     OpacityFunction -&amp;gt; None, Boxed -&amp;gt; False]} &#xD;
![Figure 2][3]&#xD;
Therefore the first mode of 440.033 Hz is close to &amp;#034;A4&amp;#034; (440 Hz) tone. But we expecting &amp;#034;C4&amp;#034; (261.626 Hz), or &amp;#034;C#4&amp;#034; (277.183 Hz). The main reason of this discrepancies could be the wood plate vibration from the back side. Thus we define mesh, parameters of the wood plate and modes as follows&#xD;
&#xD;
    dreg = DiscretizeRegion[reg6, {{-10, 10}, {0, 36}}, &#xD;
      MaxCellMeasure -&amp;gt; .05]&#xD;
    Y = 10.8*10^9; nu = 31/100; rho = 500; h = .003; d = &#xD;
     10^4 Sqrt[Y h^2/(12 rho (1 - nu^2))];Ld2 = {Laplacian[-d u[x, y], {x, y}] + &#xD;
        v[x, y], -d Laplacian[v[x, y], {x, y}]};&#xD;
    &#xD;
    {vals, funs} = &#xD;
      NDEigensystem[{Ld2, DirichletCondition[u[x, y] == 0, True]}, {u, v},&#xD;
        Element[{x, y}, dreg], 5];&#xD;
    &#xD;
    Table[DensityPlot[Re[funs[[i, 1]][x, y]], {x, y} \[Element] dreg, &#xD;
      PlotRange -&amp;gt; All, PlotLabel -&amp;gt; vals[[i]]/(2 Pi), &#xD;
      ColorFunction -&amp;gt; &amp;#034;Rainbow&amp;#034;, AspectRatio -&amp;gt; Automatic], {i, 2, &#xD;
      Length[vals]}]&#xD;
![Figure 3][4]&#xD;
Hence for wood plate we have mode of 259.394 Hz and it is close to C4 tone. &#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2021-01-04at1.47.31PM.jpg&amp;amp;userId=20103&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=bd9Wx.png&amp;amp;userId=1218692&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=w7dPm.png&amp;amp;userId=1218692&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=qb3HU.png&amp;amp;userId=1218692</description>
    <dc:creator>Alexander Trounev</dc:creator>
    <dc:date>2021-01-03T23:13:58Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1659553">
    <title>Knitting images: using Radon transform and its inverse for creative arts</title>
    <link>https://community.wolfram.com/groups/-/m/t/1659553</link>
    <description>Dear all, inspired by another [great post][1] of [@Anton Antonov][at0]  and in particular there by a remark of [@Vitaliy Kaurov][at1]  pointing to [the art of knitting images][2] I could not resist trying with Mathematica. Clearly - this problem is crying out loudly for **Radon transform**! &#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
I start by choosing some example image, convert it to inverse grayscale and perform the Radon transform. &#xD;
&#xD;
    ClearAll[&amp;#034;Global`*&amp;#034;]&#xD;
    img0 = RemoveBackground[&#xD;
       ImageTrim[&#xD;
        ExampleData[{&amp;#034;TestImage&amp;#034;, &amp;#034;Girl3&amp;#034;}], {{80, 30}, {250, 240}}], {&amp;#034;Background&amp;#034;, {&amp;#034;Uniform&amp;#034;, .29}}];&#xD;
    img1 = ImageAdjust[ColorNegate@ColorConvert[RemoveAlphaChannel[img0], &amp;#034;Grayscale&amp;#034;]];&#xD;
    {xDim, yDim} = {180, 400}; (* i.e. angles between 1\[Degree] and 180\[Degree] *)&#xD;
    &#xD;
    rd0 = Radon[img1, {xDim, yDim}];&#xD;
    ImageCollage[{img0, ImageAdjust@rd0}, Method -&amp;gt; &amp;#034;Rows&amp;#034;, &#xD;
     Background -&amp;gt; None, ImagePadding -&amp;gt; 10]&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
Every column of the Radon image represents a different angle of projection. So next I separate these columns into (here 180) single Radon images and do an inverse Radon transform on each:&#xD;
&#xD;
    maskLine[a_] := Table[If[a == n, 1, 0], {n, 1, xDim}];&#xD;
    maskImg = Table[Image[ConstantArray[maskLine[c], yDim]], {c, 1, xDim}];&#xD;
    rdImgs = rd0 maskImg;&#xD;
    ProgressIndicator[Dynamic[n], {1, xDim}]&#xD;
    invRadImgs = &#xD;
      Table[{ImageApply[If[# &amp;gt; 0, #, 0] &amp;amp;, &#xD;
         InverseRadon[rdImgs[[n]]]], -(n - 91) \[Degree]}, {n, 1, xDim}];&#xD;
&#xD;
These data already represent the angle dependent intensities for backpropagation. Now one just has *somehow* to translate these intensities into discretely spaced lines (because this is the actual task in analogy to the above mentioned knitting ). Here is my simple attempt, which e.g. for 69° gives the following result (I am not really happy with this -  there is definitely room for improvement!):&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
    valsAngle[invRads_] := Module[{img, angle, data, l2},&#xD;
       angle = Last@invRads;&#xD;
       data = Max /@ (Transpose@*ImageData@*ImageRotate @@ invRads);&#xD;
       l2 = Round[Length[data]/2];&#xD;
       data = MapIndexed[{First[#2] - l2, #1} &amp;amp;, data];&#xD;
       {Select[&#xD;
         Times @@@ ({#1, &#xD;
              If[#2 &amp;gt; .0003, 1, 0]} &amp;amp; @@@ ((Mean /@ # &amp;amp;)@*Transpose /@ &#xD;
              Partition[data, 5])), # != 0 &amp;amp;], angle}  (* &#xD;
       limiting value of 0.0003 is just empirical! *)&#xD;
       ];&#xD;
    &#xD;
    va = valsAngle /@ invRadImgs;&#xD;
    graphicsData[va_] := Module[{u, angle},&#xD;
       {u, angle} = va;&#xD;
       InfiniteLine[# {Cos[angle], -Sin[angle]}, {Sin[angle], &#xD;
           Cos[angle]}] &amp;amp; /@ u];&#xD;
    &#xD;
    gd = graphicsData /@ va;&#xD;
    Graphics[{Thickness[.0003], gd}, ImageSize -&amp;gt; 600, &#xD;
     PlotRange -&amp;gt; {{-170, 170}, {-220, 220}}]&#xD;
&#xD;
... and the result is a bunch of lines:&#xD;
&#xD;
![enter image description here][6]&#xD;
 [at0]: https://community.wolfram.com/web/antononcube&#xD;
&#xD;
 [at1]: https://community.wolfram.com/web/vitaliyk&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com/groups/-/m/t/1555648?p_p_auth=T7A50bYl&#xD;
  [2]: http://artof01.com/vrellis/works/knit.html&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ImageOfLines.gif&amp;amp;userId=32203&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=img0rd0.jpg&amp;amp;userId=32203&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=linesample.png&amp;amp;userId=32203&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ImageOfLines.png&amp;amp;userId=32203</description>
    <dc:creator>Henrik Schachner</dc:creator>
    <dc:date>2019-04-13T20:01:08Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/932548">
    <title>Beyond Four Corners, USA</title>
    <link>https://community.wolfram.com/groups/-/m/t/932548</link>
    <description>#Introduction&#xD;
I recently saw a TV show set at Four Corners USA, the point where Utah, Colorado, Arizona, and New Mexico meet:&#xD;
&#xD;
![enter image description here][1]&#xD;
&#xD;
It made me wonder how frequent 4 or more geographical borders meet at one point. According to [Wikipedia][2], 4 borders meeting at a point is called a ***quadripoint***, 5 borders meeting is called a ***quintipoint***, and in general it&amp;#039;s called a ***multipoint***. The entry only lists one quintipoint and goes on to say&#xD;
&#xD;
&amp;gt; Perhaps a dozen quintipoints of various levels of geopolitical subdivisions are scattered around the world;&#xD;
&#xD;
This piqued my interest to find all multipoints, using the Wolfram Language.&#xD;
&#xD;
--------&#xD;
#Results&#xD;
&#xD;
Before I give the details on how to detect multipoints, I&amp;#039;d like to showcase the results.&#xD;
&#xD;
###Summary&#xD;
 - Since borders are not always precise (or even well defined at times), I allowed for an error up to ~100 meters when classifying points.&#xD;
 - The polygons were obtained from the `&amp;#034;Country&amp;#034;` and `&amp;#034;AdministrativeDivision&amp;#034;` `Entity` types (about 40,000 in total).&#xD;
 - There are a total of **724 quadripoints** in this dataset.&#xD;
 - There are a total of **13 quintipoints** in this dataset.&#xD;
 - There is **1 *10-point*** in this dataset!&#xD;
 - There are **only 6 multipoints** in the dataset whose regions *don&amp;#039;t* share the same parent region.&#xD;
&#xD;
###Quadripoints&#xD;
With **724 quadripoints**, there are too many to list here, but here are a few interesting ones.&#xD;
&#xD;
 - The only countries to form a quadripoint are **Namibia, Botswana, Zambia, and Zimbabwe**.&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
 - There are a considerable amount of **counties in Iowa and Texas** that are apart of multiple quadripoints, i.e. more than one corner is a quadripoint. This is because they are roughly arranged in a rectangular grid.&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
 - There were only 6 quadripoints found whose parent regions differ:&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
 - Here&amp;#039;s a visual summary of all quadripoints found (note the level 3 regions were heavily thickened to become visible):&#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
###Quintipoints&#xD;
Here are all **13 quintipoints** found:&#xD;
&#xD;
 - **Saint Kitts and Nevis**: Saint George Gingerland - Saint James Windward - Saint John Figtree - Saint Paul Charlestown - Saint Thomas Lowland&#xD;
 - **Boyaca, Colombia**: Chinavita - Garagoa - Miraflores - Ramiriquí - Zetaquirá&#xD;
 - **Counties in Florida, USA**: Glades - Hendry - Martin - Okeechobee - Palm Beach&#xD;
 - **Usulutan, El Salvador**: California - Ozatlán - Santa Elena - Tecapán - Usulután&#xD;
 - **Arequipa, Arequipa, Peru**: Alto Selva Alegre - Cayma - Chiguata - Miraflores - San Juan de Tarucani&#xD;
 - **Cuenca, Azuay, Ecuador**: Chiquintad - Cuenca - Ricaurte - Sidcay - Sinicay&#xD;
 - **Pea Reang, Prey Vêng, Cambodia**: Kampong Popil - Mesa Prachan - Prey Sralet - Reab - Roka&#xD;
 - **Rieti, Lazio, Italy**: Borgo Velino - Castel Sant&amp;#039; Angelo - Cittaducale - Micigliano - Rieti&#xD;
 - **Cosenza, Calabria, Italy**: Marano Marchesato - Marano Principato - Rende - San Fili - San Lucido&#xD;
 - **Napoli, Campania, Italy**: Boscotrecase - Ercolano - Ottaviano - Torre Del Greco - Trecase&#xD;
 - **Savona, Liguria, Italy**: Bardineto - Boissano - Giustenice - Loano - Pietra Ligure&#xD;
 - **Torino, Piemonte, Italy**: Cuceglio - Mercenasco - Montalenghe - Scarmagno - Vialfrè&#xD;
 - **Viterbo, Lazio, Italy**: Bolsena - Capodimonte - Gradoli - Montefiascone - San Lorenzo Nuovo&#xD;
&#xD;
As you can see, Italy takes the cake with 6 quintipoints! Here&amp;#039;s a visual of these quintipoints, along with the error allowing them to be classified as such:&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
###A Near 6-point&#xD;
Notice in the top right map above, it looks like there is room for one more region in Viterbo, Lazio, Italy, which would make it a 6-point. Here&amp;#039;s the 6th region (Grotte Di Castro) in black:&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
It turns out Grotte Di Castro is about 700 meters from the quintipoint, making this only a ***near* 6-point**:&#xD;
&#xD;
![enter image description here][9]&#xD;
&#xD;
###10-point&#xD;
As mentioned in the [Wikipedia entry][10], there is a 10-point in Italy at the summit of [Mount Etna][11]:&#xD;
&#xD;
 - **Catania, Sicily, Italy**: Adrano - Belpasso - Biancavilla - Bronte - Castiglione Di Sicilia - Maletto - Nicolosi - Randazzo - Sant&amp;#039; Alfio - Zafferana Etnea&#xD;
&#xD;
![enter image description here][12]&#xD;
&#xD;
###Allowing for more error&#xD;
If we allow for more error, we can find ***near-multipoints*** - regions that almost have a multipoint, but clearly don&amp;#039;t. For example, there is a near-quintipoint in Texas, USA:&#xD;
&#xD;
![enter image description here][13]&#xD;
&#xD;
--------&#xD;
#Code&#xD;
The idea to find multipoints within a collection of regions is as follows:&#xD;
&#xD;
 1. Obtain the `Polygon` for each region.&#xD;
 2. For each pair of regions, if there&amp;#039;s a vertex from one of the polygons which is &amp;#034;close&amp;#034; to the other, mark these regions as touching. `RegionDistance` can be used for this.&#xD;
 3. The relation of touching between pairs forms an adjacency matrix. From this, form a `Graph` and use `FindClique` to find all multipoints in this collection.&#xD;
&#xD;
Here is code that does just that:&#xD;
&#xD;
    discretize[Polygon[pts_?MatrixQ]] := &#xD;
        MeshRegion[pts, Polygon[Range[Length[pts]]]]&#xD;
    discretize[Polygon[pts_?(VectorQ[#, MatrixQ] &amp;amp;)]] :=&#xD;
      With[{pts2 = Select[pts, Length[#] &amp;gt; 2 &amp;amp;]},&#xD;
        MeshRegion[Join @@ pts2, &#xD;
          Polygon[Range[# + 1, #2] &amp;amp; @@@ Partition[Prepend[Accumulate[Map[Length, pts2]], 0], 2, 1]]]&#xD;
      ]&#xD;
    discretize[expr_] :=&#xD;
      With[{mr = DiscretizeGraphics[Graphics[expr]]},&#xD;
        mr /; MeshRegionQ[mr]&#xD;
      ]&#xD;
    discretize[_] = $Failed;&#xD;
&#xD;
    polyLookup = discretize /@ (Join[&#xD;
      EntityValue[&amp;#034;Country&amp;#034;, &amp;#034;Polygon&amp;#034;, &amp;#034;EntityAssociation&amp;#034;],&#xD;
      EntityValue[&amp;#034;AdministrativeDivision&amp;#034;, &amp;#034;Polygon&amp;#034;, &amp;#034;EntityAssociation&amp;#034;]&#xD;
    ] /. GeoPosition -&amp;gt; Identity);&#xD;
&#xD;
    MultiPoints[divs_List, n_] /; Length[divs] &amp;lt; n = {};&#xD;
    &#xD;
    MultiPoints[divs_List, n_] :=&#xD;
    	Block[{polys, disj, cands},&#xD;
    		polys = polyLookup /@ divs;&#xD;
    		(&#xD;
    			disj = Boole[Outer[CoordinateNear, polys, polys]] - IdentityMatrix[Length[divs]];&#xD;
    			(&#xD;
    				cands = FindClique[AdjacencyGraph[divs, disj], {n, Infinity}, All];&#xD;
    				&#xD;
    				resolveMultiPoints[cands, AssociationThread[divs, polys]]&#xD;
    				&#xD;
    			) /; MatrixQ[disj, IntegerQ]&#xD;
    			&#xD;
    		) /; VectorQ[polys, MeshRegionQ]&#xD;
    	]&#xD;
    MultiPoints[___] = {};&#xD;
    &#xD;
    $tol = 0.001;&#xD;
    CoordinateNear[mr1_, mr2_, tol_:$tol] :=&#xD;
    	With[{d = {{-tol, tol}, {-tol, tol}}},&#xD;
    		And[&#xD;
    			NoneTrue[Transpose[{d+RegionBounds[mr1], d+RegionBounds[mr2]}], #1[[2,1]] &amp;gt; #1[[1,2]] || #1[[1,1]] &amp;gt; #1[[2,2]]&amp;amp;],&#xD;
    			Min[RegionDistance[mr1, MeshCoordinates[mr2]]] &amp;lt; tol&#xD;
    		]&#xD;
    	]&#xD;
    &#xD;
    resolveMultiPoints[{}, _] = {};&#xD;
    resolveMultiPoints[cands_List, passoc_?AssociationQ] :=&#xD;
    	Select[cands, MultiPointQ[#, passoc]&amp;amp;]&#xD;
    &#xD;
    MultiPointQ[cands_, passoc_?AssociationQ, tol_:$tol] :=&#xD;
    	Block[{coords, mrs},&#xD;
    		mrs = passoc /@ cands;&#xD;
    		coords = Union @@ MeshCoordinates /@ mrs;&#xD;
    		&#xD;
    		Or @@ Thread[And @@ (Thread[RegionDistance[#, coords] &amp;lt; tol]&amp;amp; /@ mrs)]&#xD;
    	]&#xD;
Now here&amp;#039;s all multipoints formed from countries:&#xD;
&#xD;
![enter image description here][14]&#xD;
&#xD;
Now to explore all cases, we can start off by looking for multipoints in all subdivisions of a given region, e.g. given Florida, find all multipoints within the counties of Florida. This can be achieved by building a hierarchical graph connecting countries and administrative divisions. Then for a given region, this graph can be used to find all subdivisions and the above code can be used to find the multipoints.&#xD;
&#xD;
    ad = AdministrativeDivisionData[];&#xD;
    pr = EntityValue[&amp;#034;AdministrativeDivision&amp;#034;, &amp;#034;ParentRegion&amp;#034;];&#xD;
    &#xD;
    $ADNetwork = Graph[Join[&#xD;
        Thread[&amp;#034;NullPointer&amp;#034; -&amp;gt; EntityList[&amp;#034;Country&amp;#034;]],&#xD;
        DeleteCases[Thread[pr -&amp;gt; ad], Rule[_Missing, _]]&#xD;
    ]];&#xD;
    &#xD;
    ChildrenMultiPoints[reg_] := ChildrenMultiPoints[reg, 4]&#xD;
&#xD;
    ChildrenMultiPoints[reg_, o___] :=&#xD;
    	MultiPoints[Rest[VertexOutComponent[$ADNetwork, reg, 1]], o]&#xD;
&#xD;
![enter image description here][15]&#xD;
&#xD;
Lastly, to cover all cases we need to consider sets of regions that have differing parent regions. To do this, for a given parent region $P$, first find all other regions $R_i$ (on the same level) that touch this region. Then simply run `MultiPoints` on all subdivisions in $P \cup R_i$. I omit this code here, as there were only 6 instances that came out of this case.&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=7535fourcorners.png&amp;amp;userId=46025&#xD;
  [2]: https://en.wikipedia.org/wiki/Quadripoint&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=countryquadripoint.png&amp;amp;userId=46025&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=2008squarequadripoints.png&amp;amp;userId=46025&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=crossregionquadripoints.png&amp;amp;userId=46025&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=allquadripoints.png&amp;amp;userId=46025&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=4697quintipoints.png&amp;amp;userId=46025&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=8873almostsixpoint.png&amp;amp;userId=46025&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=9086almostsixpointzoom.png&amp;amp;userId=46025&#xD;
  [10]: https://en.wikipedia.org/wiki/Quadripoint#Multipoints_of_greater_numerical_complexity&#xD;
  [11]: https://en.wikipedia.org/wiki/Mount_Etna#Geopolitical_oddity&#xD;
  [12]: http://community.wolfram.com//c/portal/getImageAttachment?filename=3719tenpoint.png&amp;amp;userId=46025&#xD;
  [13]: http://community.wolfram.com//c/portal/getImageAttachment?filename=4645almostquintpoint.png&amp;amp;userId=46025&#xD;
  [14]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2016-10-0117.18.37.png&amp;amp;userId=46025&#xD;
  [15]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2016-10-0117.27.16.png&amp;amp;userId=46025</description>
    <dc:creator>Greg Hurst</dc:creator>
    <dc:date>2016-10-01T22:56:22Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2451238">
    <title>Perfect and almost perfect rings (chains) of 4-antiprisms</title>
    <link>https://community.wolfram.com/groups/-/m/t/2451238</link>
    <description>![enter image description here][1]&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
An [n-gonal antiprism or n-antiprism][3] is a polyhedron composed of two parallel copies of an n-sided polygon, connected by a band of 2n triangles.&#xD;
&#xD;
    Grid@Transpose@Table[PolyhedronData[{&amp;#034;Antiprism&amp;#034;,k},#]&amp;amp;/@{&amp;#034;Image&amp;#034;,&amp;#034;Net&amp;#034;},{k,3,7}]&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
To form an almost perfect ring of 4-antiprisms firstly we need a set of vertices and coordinates:&#xD;
&#xD;
    offset =#+{0,0,Sqrt[1-1/4 Sec[π/8]^2]+4.05} &amp;amp;/@(2PolyhedronData[{&amp;#034;Antiprism&amp;#034;,4}, &amp;#034;VertexCoordinates&amp;#034;]);&#xD;
    &#xD;
    face={{5,1,2,6},{8,4,7,3},{6,4,8},{2,7,4},{1,3,7},{5,8,3},{6,2,4},{2,1,7},{1,5,3},{5,6,8}};&#xD;
&#xD;
&#xD;
Then we can make 13 copies: &#xD;
&#xD;
    Graphics3D[&#xD;
    Table[GraphicsComplex[RotationMatrix[k 2 Pi/13,{0,1,0}].#&amp;amp;/@offset,Polygon/@face],{k,0,12}], &#xD;
    Boxed-&amp;gt; False, SphericalRegion-&amp;gt;True]&#xD;
&#xD;
![13 antiprisms][5]&#xD;
&#xD;
This is **not** exact, but it&amp;#039;s very close.&#xD;
&#xD;
![13 antiprisms side][6]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=antiptism4.gif&amp;amp;userId=11733&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=asdf43qasdf.jpg&amp;amp;userId=11733&#xD;
  [3]: https://mathworld.wolfram.com/Antiprism.html&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=sdfq3dfag43.jpg&amp;amp;userId=11733&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=13anti.jpg&amp;amp;userId=21530&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=13antiside.jpg&amp;amp;userId=21530</description>
    <dc:creator>Ed Pegg</dc:creator>
    <dc:date>2022-01-20T20:12:49Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/870698">
    <title>Computationally solving &amp;#034;Easy Cube&amp;#034; and &amp;#034;Soma Cube&amp;#034; games / puzzles</title>
    <link>https://community.wolfram.com/groups/-/m/t/870698</link>
    <description>**Easy Cube** is a reflexion game from Japan. It consists of a set of 7 pieces which are &amp;#034;tetris&amp;#034;-like (each piece is a simple geometrical shape made from 3,4 or 5 cubes), and a collection of 48 problems, where the goal is to use the pieces to fill a given shape (in 2d, or in 3d for the hardest problems). &#xD;
&#xD;
The game box ![enter image description here][1]&#xD;
&#xD;
The 7 pieces ![enter image description here][2]&#xD;
&#xD;
2 examples of problems ![enter image description here][3]&#xD;
&#xD;
It is pleasant to play, with the difficulty slowly increasing whit the hardest problems.  I decided to try to solve it using Mathematica. I did not use any advanced mathematics for this (which anyway I would not know :-)), and I wanted a method general enough so it could solve all the problems without any specific adpatation. I went for a purely random method, where the program places a first piece at random, then try to put a second piece, etc.  When it fails to add a piece after a fixed number of attemps, it simply starts the whole process again. So this program does not learn anything... It just tries many many different possibilities, until it finds a solution !    Using Wolfram language, the code to make it and to vizualize to result was quite simple and effective (I show the code details at the end of this post for people interested). In particular, going from the 2d case to the 3d case needed very small changes only.&#xD;
&#xD;
The two followings animations show the program in action for a 2d problem and a 3d problem&#xD;
![enter image description here][4]  &#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
The number of attempts needed to reach a solution is of course random, and depends on the difficulty of the problem. Typically, it takes between a few hundreds and a few thousands iterations, which takes between a few seconds to 1-2 minutes.   Here a sample of 4 solutions found for a 2d problem :&#xD;
![Sample solutions from a 2d problem][6] &#xD;
&#xD;
And 2 solutions from a 3d problem :&#xD;
![Sample solutions from a 2d problem][7]&#xD;
&#xD;
Finally, I considered it if was possible to use this method to find **all solutions** for a given problem (the number of different solutions is an info given on the description of each problem). In principle, because the method is random, it is not well suited for this (one can never be sure that all solutions have been found). However, since the method is quite fast, I decided to try anyway. For a given problem, I computed 10000 solutions.  Here is a plot of the number of attempts needed for each solution, and a histogram of this:&#xD;
![Number of attempts for 10000 solutions][8]&#xD;
&#xD;
On average, finding a solution to this problem requested 2882 attempts...&#xD;
&#xD;
From the 10000 solutions, one wants only different solutions. This is easily done with the **DeleteDuplicates** command:&#xD;
&#xD;
    SolgridQ26ListMReduced = &#xD;
     DeleteDuplicates@SolgridQ26ListM; Length@SolgridQ26ListMReduced&#xD;
    &#xD;
    362&#xD;
&#xD;
which gives 362 different solutions. However, since this problem geometry has a simple central symmetry, one also want to get rid of &amp;#034;symmetric copies&amp;#034; of the solutions. Defining the symmetry operation as the GsymGrid function, this is again done with a **DeleteDuplicates** command :&#xD;
&#xD;
    SolgridQ26ListMReducedSym = &#xD;
     DeleteDuplicates[&#xD;
      SolgridQ26ListMReduced, #2 == &#xD;
        GSymGrid[#1] &amp;amp;]; Length@SolgridQ26ListMReducedSym&#xD;
    &#xD;
    188&#xD;
&#xD;
which gives 188 unique solutions. This is precisely the number which is given in the problem description ! So the method was able to find all solutions.&#xD;
Here is plot with the 188 solutions:&#xD;
![all solutions][9]&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
Details of the code&#xD;
-------------------&#xD;
&#xD;
**Definition of the pieces** (2d case). Each piece is a simple list of the points make the piece. When then construct, for each piece, a list of copies of it with all possible orientations. &#xD;
&#xD;
    Pieces Definitions&#xD;
    PTriangle = {{0, 0}, {0, 1}, {1, 0}};&#xD;
    PSquare = {{0, 0}, {0, 1}, {1, 0}, {1, 1}};&#xD;
    PLine = {{0, 0}, {0, 1}, {0, 2}};&#xD;
    PL = {{0, 0}, {0, 1}, {1, 0}, {2, 0}};&#xD;
    PPodium = {{0, 0}, {0, 1}, {-1, 0}, {1, 0}};&#xD;
    PSnake = {{0, 0}, {0, 1}, {1, 0}, {-1, 1}};&#xD;
    PBulky = {{0, 0}, {1, 0}, {0, 1}, {1, 1}, {-1, 1}};&#xD;
    (* Rotation by angle \[Pi]/2 matrix*)&#xD;
    Mrot = {{0, 1}, {-1, 0}};&#xD;
    (* Reflection by y-axis matrix *)&#xD;
    Mref = {{-1, 0}, {0, 1}};&#xD;
    MUnit = {{1, 0}, {0, 1}};&#xD;
    (*Operators which perform a given number of rotation, and of \&#xD;
    reflection*)&#xD;
    RotatePiece[piece_, n_] := Nest[Mrot.# &amp;amp;, #, n] &amp;amp; /@ piece&#xD;
    ReflectPiece[piece_, n_] := &#xD;
     If[n == 0, (MUnit.#) &amp;amp; /@ piece, (Mref.#) &amp;amp; /@ piece]&#xD;
    Each piece with all the possible orientations&#xD;
    PTriangleAll = {PTriangle, RotatePiece[PTriangle, 1], &#xD;
       RotatePiece[PTriangle, 2], RotatePiece[PTriangle, 3]};&#xD;
    PSquareAll = {PSquare};&#xD;
    PLineAll = {PLine, RotatePiece[PLine, 1]};&#xD;
    PLAll = Module[{PLr = ReflectPiece[PL, 1]}, {PL, RotatePiece[PL, 1], &#xD;
        RotatePiece[PL, 2], RotatePiece[PL, 3], PLr, RotatePiece[PLr, 1], &#xD;
        RotatePiece[PLr, 2], RotatePiece[PLr, 3]}];&#xD;
    PPodiumAll = {PPodium, RotatePiece[PPodium, 1], &#xD;
       RotatePiece[PPodium, 2], RotatePiece[PPodium, 3]};&#xD;
    PSnakeAll = {PSnake, RotatePiece[PSnake, 1], ReflectPiece[PSnake, 1], &#xD;
       RotatePiece[ReflectPiece[PSnake, 1], 1]};&#xD;
    PBulkyAll = &#xD;
      Module[{PBulkyr = ReflectPiece[PBulky, 1]}, {PBulky, &#xD;
        RotatePiece[PBulky, 1], RotatePiece[PBulky, 2], &#xD;
        RotatePiece[PBulky, 3], PBulkyr, RotatePiece[PBulkyr, 1], &#xD;
        RotatePiece[PBulkyr, 2], RotatePiece[PBulkyr, 3]}];&#xD;
    tPieces = {PBulkyAll, PLAll, PPodiumAll, PSnakeAll, PSquareAll, &#xD;
       PLineAll, PTriangleAll};&#xD;
    tPiecesNames = {&amp;#034;Bu&amp;#034;, &amp;#034;Ll&amp;#034;, &amp;#034;Po&amp;#034;, &amp;#034;Sn&amp;#034;, &amp;#034;Sq&amp;#034;, &amp;#034;Li&amp;#034;, &amp;#034;Tr&amp;#034;};&#xD;
&#xD;
&#xD;
**Functions which place the pieces**&#xD;
&#xD;
    Piece placement functions&#xD;
    PutPiece[piece_, piecename_, grid_] := &#xD;
     Module[{IniPt, IniPtxy, Pts, Vcheck, PtsinGrid, Pos, i, gridx}, &#xD;
      gridx = grid;&#xD;
      IniPt = RandomChoice[Position[gridx, 0]];&#xD;
      Pts = Map[IniPt + # &amp;amp;, RandomChoice[piece]];&#xD;
      PtsinGrid = gridx[[Sequence @@ #]] &amp;amp; /@ Pts;&#xD;
      Vcheck = &#xD;
       If[PtsinGrid ==  Table[0, Length[PtsinGrid]], &amp;#034;success&amp;#034;, &amp;#034;failure&amp;#034;];&#xD;
      If[Vcheck == &amp;#034;success&amp;#034;, &#xD;
       Do[gridx[[Sequence @@ Pts[[i]]]] = piecename, {i, &#xD;
         Length[Pts]}]; {&amp;#034;success&amp;#034;, gridx}, {&amp;#034;failure&amp;#034;, gridx}]&#xD;
      ]&#xD;
    AddOnePiece[gridin_, piece_, piecename_, nmax_] := &#xD;
     Module[{cc = &amp;#034;failure&amp;#034;, nn = 0, aa}, &#xD;
      While[(cc != &amp;#034;success&amp;#034;) &amp;amp;&amp;amp; (nn &amp;lt; nmax), &#xD;
       aa = PutPiece[piece, piecename, gridin]; cc = aa[[1]]; &#xD;
       nn = nn + 1]; aa]&#xD;
&#xD;
**Grid definition, and plotting functions**  The initial grid is a ensemble of 0, embedded in a series of 1, forming a matrix.  When a piece is placed the 0&amp;#039;s it occupies are replaced by the name of the piece&#xD;
&#xD;
    General Grid Definitions&#xD;
    TheGrid0 = Table[1, {i, -6, 6, 1}, {j, -6, 6, 1}];&#xD;
    GridDefine[coord_] :=  &#xD;
     Module[{gridout}, gridout = TheGrid0; &#xD;
      Do[gridout[[Sequence @@ (coord[[i]] + {7, 7}) ]] = 0, {i, &#xD;
        Length[coord]}]; gridout]&#xD;
    DrawPieceRectangle[piecename_, grid_, color_] := {color, &#xD;
      Map[Rectangle[{#[[1]] - 0.5 - 7, #[[2]] - 0.5 - 7}, {#[[1]] + 0.5 - &#xD;
           7, #[[2]] + 0.5 - 7}, RoundingRadius -&amp;gt; 0.] &amp;amp;, &#xD;
       Position[grid, piecename]]}&#xD;
    mycolors = ColorData[24];&#xD;
    PlotGrid[grid_, plotrange_] := &#xD;
     Graphics[{{White, Rectangle[{-6, -6}, {6, 6}]},&#xD;
       DrawPieceRectangle[0, grid, White], &#xD;
       DrawPieceRectangle[1, grid, Black], &#xD;
       DrawPieceRectangle[tPiecesNames[[#]], grid, &#xD;
          mycolors[If[# != 6, #, # + 4]]] &amp;amp; /@ Range[7]}, &#xD;
      PlotRange -&amp;gt; plotrange]&#xD;
&#xD;
**The final solving functions**&#xD;
&#xD;
    Full solving function&#xD;
    Get the solution, and at each step provides a plot named p, which can be dynamically visualized using a cell with Dynamic[p]&#xD;
    SolveGrid[InitGrid_, plotrange_] := &#xD;
     Module[{imax, nattempt, grid, i, vc}, imax = 0; nattempt = 0; &#xD;
      While[imax &amp;lt; 8, grid[1] = InitGrid; i = 1; vc = &amp;#034;success&amp;#034;; &#xD;
       While[(i &amp;lt; 8) &amp;amp;&amp;amp; (vc == \!\(\*&#xD;
    TagBox[&#xD;
    StyleBox[&amp;#034;\&amp;#034;\&amp;lt;success\&amp;gt;\&amp;#034;&amp;#034;,&#xD;
    ShowSpecialCharacters-&amp;gt;False,&#xD;
    ShowStringCharacters-&amp;gt;True,&#xD;
    NumberMarks-&amp;gt;True],&#xD;
    FullForm]\)),&#xD;
         {vc, grid[i + 1]} =  &#xD;
         AddOnePiece[grid[i], tPieces[[i]], tPiecesNames[[i]], 30]; &#xD;
        p = PlotGrid[grid[i + 1], plotrange]; &#xD;
        If[vc == &amp;#034;success&amp;#034; || i &amp;lt; 7, i++; imax = i, i++]]; nattempt++]; &#xD;
      Print[nattempt]; PlotGrid[grid[8], plotrange]; grid[8]]&#xD;
    Get ony the solution, without final plot, nor dynamical vizualisation&#xD;
    SolveGridBare[InitGrid_] := &#xD;
     Module[{imax, nattempt, grid, i, vc}, imax = 0; nattempt = 0; &#xD;
      While[imax &amp;lt; 8, grid[1] = InitGrid; i = 1; vc = &amp;#034;success&amp;#034;; &#xD;
       While[(i &amp;lt; 8) &amp;amp;&amp;amp; (vc == \!\(\*&#xD;
    TagBox[&#xD;
    StyleBox[&amp;#034;\&amp;#034;\&amp;lt;success\&amp;gt;\&amp;#034;&amp;#034;,&#xD;
    ShowSpecialCharacters-&amp;gt;False,&#xD;
    ShowStringCharacters-&amp;gt;True,&#xD;
    NumberMarks-&amp;gt;True],&#xD;
    FullForm]\)),&#xD;
         {vc, grid[i + 1]} =  &#xD;
         AddOnePiece[grid[i], tPieces[[i]], tPiecesNames[[i]], 30]; &#xD;
        If[vc == &amp;#034;success&amp;#034; || i &amp;lt; 7, i++; imax = i, i++]]; nattempt++]; &#xD;
      Print[nattempt]; grid[8]]&#xD;
    SolveGridBare2[InitGrid_] := &#xD;
     Module[{imax, nattempt, grid, i, vc}, imax = 0; nattempt = 0; &#xD;
      While[imax &amp;lt; 8, grid[1] = InitGrid; i = 1; vc = &amp;#034;success&amp;#034;; &#xD;
       While[(i &amp;lt; 8) &amp;amp;&amp;amp; (vc == \!\(\*&#xD;
    TagBox[&#xD;
    StyleBox[&amp;#034;\&amp;#034;\&amp;lt;success\&amp;gt;\&amp;#034;&amp;#034;,&#xD;
    ShowSpecialCharacters-&amp;gt;False,&#xD;
    ShowStringCharacters-&amp;gt;True,&#xD;
    NumberMarks-&amp;gt;True],&#xD;
    FullForm]\)),&#xD;
         {vc, grid[i + 1]} =  &#xD;
         AddOnePiece[grid[i], tPieces[[i]], tPiecesNames[[i]], 30]; &#xD;
        If[vc == &amp;#034;success&amp;#034; || i &amp;lt; 7, i++; imax = i, i++]]; &#xD;
       nattempt++]; {grid[8], nattempt}]&#xD;
&#xD;
**Example of use**   &#xD;
&#xD;
    coordQ35 = &#xD;
      Join[Table[{i, 2}, {i, -2, 3}], Table[{i, -2}, {i, -2, 3}], &#xD;
       Table[{i, 1}, {i, 0, 3}], Table[{i, 0}, {i, 0, 3}], &#xD;
       Table[{i, -1}, {i, 0, 3}], Table[{-2, j}, {j, -1, 1}]];&#xD;
    &#xD;
    TheGridQ35 = GridDefine[coordQ35];&#xD;
    SolgridQ35ex1 = SolveGridBare[TheGridQ35];&#xD;
    PlotGrid[SolgridQ35ex1, {{-3.5, 4.5}, {-3.5, 3.5}}]&#xD;
&#xD;
A dynamic view of the process (similar to the animations shown above) is obtained by running a cell &amp;#034;**Dynamic[p]**&amp;#034; before calling SolveGrid[TheGridQ35,{{-3.5, 4.5}, {-3.5, 3.5}}]&#xD;
&#xD;
**Pieces definition for the 3 case**  (here all the possible orientations are obtained by applying randomly rotations and reflection on the initial piece)&#xD;
&#xD;
     &#xD;
    Pieces Definitions&#xD;
    PTriangle = {{0, 0, 0}, {0, 1, 0}, {1, 0, 0}};&#xD;
    PSquare = {{0, 0, 0}, {0, 1, 0}, {1, 0, 0}, {1, 1, 0}};&#xD;
    PLine = {{0, -1, 0}, {0, 0, 0}, {0, 1, 0}};&#xD;
    PL = {{0, 0, 0}, {0, 1, 0}, {1, 0, 0}, {2, 0, 0}};&#xD;
    PPodium = {{0, 0, 0}, {0, 1, 0}, {-1, 0, 0}, {1, 0, 0}};&#xD;
    PSnake = {{0, 0, 0}, {0, 1, 0}, {1, 0, 0}, {-1, 1, 0}};&#xD;
    PBulky = {{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}, {-1, 1, 0}};&#xD;
    (* Rotation by angle \[Pi]/2 matrix*)&#xD;
    Mrotz = {{0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};&#xD;
    Mrotx = {{1, 0, 0}, {0, 0, 1}, {0, -1, 0}};&#xD;
    Mrotx = {{0, 0, -1}, {0, 1, 0}, {1, 0, 0}};&#xD;
    (* Reflection  matrix *)&#xD;
    Mrefx = {{-1, 0, 0}, {0, 1, 0}, {0, 0, 1}};&#xD;
    Mrefy = {{1, 0, 0}, {0, -1, 0}, {0, 0, 1}};&#xD;
    Mrefz = {{1, 0, 0}, {0, 1, 0}, {0, 0, -1}};&#xD;
    MUnit = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};&#xD;
    (*Operators which perform a given number of rotation, and of \&#xD;
    reflection*)&#xD;
    RotatePiecex[piece_, n_] := Nest[Mrotx.# &amp;amp;, #, n] &amp;amp; /@ piece&#xD;
    RotatePiecey[piece_, n_] := Nest[Mrotx.# &amp;amp;, #, n] &amp;amp; /@ piece&#xD;
    RotatePiecez[piece_, n_] := Nest[Mrotz.# &amp;amp;, #, n] &amp;amp; /@ piece&#xD;
    ReflectPiecex[piece_, n_] := &#xD;
     If[n == 0, (MUnit.#) &amp;amp; /@ piece, (Mrefx.#) &amp;amp; /@ piece]&#xD;
    ReflectPiecey[piece_, n_] := &#xD;
     If[n == 0, (MUnit.#) &amp;amp; /@ piece, (Mrefy.#) &amp;amp; /@ piece]&#xD;
    ReflectPiecez[piece_, n_] := &#xD;
     If[n == 0, (MUnit.#) &amp;amp; /@ piece, (Mrefz.#) &amp;amp; /@ piece]&#xD;
    Each piece with all the possible orientations&#xD;
    MakeAllPieces[piece_] := &#xD;
     DeleteDuplicates@&#xD;
      Table[Module[{Rota, Rotb, Rotc, Refa, Refb, Refc, na, nb, nc, ma, &#xD;
         mb, mc},&#xD;
        Rota = RandomChoice[{RotatePiecex, RotatePiecey, RotatePiecez}];&#xD;
        Rotb = RandomChoice[{RotatePiecex, RotatePiecey, RotatePiecez}]; &#xD;
        Rotc = RandomChoice[{RotatePiecex, RotatePiecey, RotatePiecez}];&#xD;
        Refa = RandomChoice[{ReflectPiecex, ReflectPiecey, ReflectPiecez}];&#xD;
        Refb = RandomChoice[{ReflectPiecex, ReflectPiecey, ReflectPiecez}];&#xD;
        Refc = RandomChoice[{ReflectPiecex, ReflectPiecey, ReflectPiecez}];&#xD;
        na = RandomInteger[{0, 3}]; nb = RandomInteger[{0, 3}]; &#xD;
        nc = RandomInteger[{0, 3}];&#xD;
        ma = RandomInteger[{0, 1}]; mb = RandomInteger[{0, 1}]; &#xD;
        mc = RandomInteger[{0, 1}];&#xD;
        Refc[Rotc[Refb[Rotb[ Refa[Rota[piece, na], ma], nb], mb], nc], &#xD;
         mc]], {i, 1, 2000}]&#xD;
    PTriangleAll = MakeAllPieces[PTriangle]; Length@PTriangleAll&#xD;
    24&#xD;
    PSquareAll = MakeAllPieces[PSquare]; Length@PSquareAll&#xD;
    24&#xD;
    PLineAll = MakeAllPieces[PLine]; Length@PLineAll&#xD;
    6&#xD;
    PLAll = MakeAllPieces[PL]; Length@PLAll&#xD;
    24&#xD;
    PPodiumAll = MakeAllPieces[PPodium]; Length@PPodiumAll&#xD;
    24&#xD;
    PSnakeAll = MakeAllPieces[PSnake]; Length@PSnakeAll&#xD;
    24&#xD;
    PBulkyAll = MakeAllPieces[PBulky]; Length@PBulkyAll&#xD;
    24&#xD;
    tPieces = {PBulkyAll, PLAll, PPodiumAll, PSnakeAll, PSquareAll, &#xD;
       PLineAll, PTriangleAll};&#xD;
    tPiecesNames = {&amp;#034;Bu&amp;#034;, &amp;#034;Ll&amp;#034;, &amp;#034;Po&amp;#034;, &amp;#034;Sn&amp;#034;, &amp;#034;Sq&amp;#034;, &amp;#034;Li&amp;#034;, &amp;#034;Tr&amp;#034;};&#xD;
&#xD;
**Grid definition and visualisation for the 3d case** &#xD;
&#xD;
    General Grid Definitions&#xD;
    TheGrid0 = Table[1, {i, -6, 6, 1}, {j, -6, 6, 1}, {k, -6, 6, 1}];&#xD;
    GridDefine[coord_] :=  &#xD;
     Module[{gridout}, gridout = TheGrid0; &#xD;
      Do[gridout[[Sequence @@ (coord[[i]] + {7, 7, 7}) ]] = 0, {i, &#xD;
        Length[coord]}]; gridout]&#xD;
    DrawPieceCube[piecename_, grid_, color_] := {Glow[color], &#xD;
      Opacity[0.75], Specularity[0], EdgeForm[Thick], &#xD;
      Map[Cuboid[{#[[1]] - 0.5 - 7, #[[2]] - 0.5 - 7, #[[3]] - 0.5 - &#xD;
           7}] &amp;amp;, Position[grid, piecename]]}&#xD;
    mycolors = ColorData[24];&#xD;
    PlotGrid3D[grid_, plotrange_] := &#xD;
     Graphics3D[{(*{White,Cuboid[{-6,-6,-6},{6,6,6}]},*)&#xD;
       &#xD;
       DrawPieceCube[0, grid, White],(*DrawPieceCube[1,grid,Black],*)&#xD;
       DrawPieceCube[tPiecesNames[[#]], grid, &#xD;
          mycolors[If[# != 6, #, # + 4]]] &amp;amp; /@ Range[7]}, &#xD;
      PlotRange -&amp;gt; plotrange, Lighting -&amp;gt; None, Boxed -&amp;gt; False]&#xD;
    PlotGrid3D[grid_, plotrange_, pov_] := &#xD;
     Graphics3D[{(*{White,Cuboid[{-6,-6,-6},{6,6,6}]},*)&#xD;
       &#xD;
       DrawPieceCube[0, grid, White],(*DrawPieceCube[1,grid,Black],*)&#xD;
       DrawPieceCube[tPiecesNames[[#]], grid, &#xD;
          mycolors[If[# != 6, #, # + 4]]] &amp;amp; /@ Range[7]}, &#xD;
      PlotRange -&amp;gt; plotrange, Lighting -&amp;gt; None, Boxed -&amp;gt; False, &#xD;
      ViewPoint -&amp;gt; pov]&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_3757small.JPG&amp;amp;userId=867329&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_3758small.JPG&amp;amp;userId=867329&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=IMG_3756small.JPG&amp;amp;userId=867329&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=PlacePieces_Q35_anim.gif&amp;amp;userId=867329&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=PlacePieces_Q48_anim.gif&amp;amp;userId=867329&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=solutionExample1.png&amp;amp;userId=867329&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=solutionExample2.png&amp;amp;userId=867329&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=solutionHisto.jpg&amp;amp;userId=867329&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=PlacePieces_Q26_allsoluces.gif&amp;amp;userId=867329</description>
    <dc:creator>Thibaut Jonckheere</dc:creator>
    <dc:date>2016-06-11T13:29:52Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2029621">
    <title>[WSS20] Constructing protein surfaces</title>
    <link>https://community.wolfram.com/groups/-/m/t/2029621</link>
    <description>![enter image description here][2]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
  [1]: &#xD;
https://www.wolframcloud.com/obj/a47a8852-7ac2-41d2-86f6-0dcfefb86b7a&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=mainpic.jpg&amp;amp;userId=2025530</description>
    <dc:creator>Yury POLYACHENKO</dc:creator>
    <dc:date>2020-07-14T16:48:25Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/863933">
    <title>Walking strandbeest dynamics</title>
    <link>https://community.wolfram.com/groups/-/m/t/863933</link>
    <description>Many of you have seen the strandbeest (from Dutch, meaning beach-beast). These PVC tube animals created by Theo Jansen walk along the beach and are wind powered:&#xD;
&#xD;
![enter image description here][1]&#xD;
&#xD;
Years ago (2009 to be more exact) I made a post on my blog about the movement of the legs, as evidenced by the still-nicely-working Mathematica notebook:&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
At the time the proportions of the legs were not known publicly so I meticulously studied frames of (low quality) YouTube videos. I made the following diagram in Illustrator of what I thought I saw:&#xD;
&#xD;
![enter image description here][3] ![enter image description here][4]&#xD;
&#xD;
On the left the length of the legs in red, and in blue the numbers of the joints. On the right the trajectory of the joints that I calculated at the time in Mathematica. It&amp;#039;s funny that my blog does not exist any more (for years actually), but these images live on, as I found out when I looked for strandbeest on Google Images:&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
My images! But not on my website! Nice to see people still use it. Now, in 2016, I saw these files on my laptop, and thought: is there finally more known about them? Well yes, there is! The exact proportions are now known and there is tons and tons of videos, lectures, 3D-printable strandbeest models, interviews with Theo Jansen and other stuff! So now we can find the exact dimensions readily on the internet:&#xD;
&#xD;
![enter image description here][6] &#xD;
&#xD;
Notice that I (wrongly) assumed that the legs had &amp;#039;feet&amp;#039;! oops! I was very happy to see that my lengths were not that wrong though! Let&amp;#039;s recreate the strandbeest. We do so by first creating a function that quickly finds the intersection of two circles:&#xD;
&#xD;
    Clear[FindPoint, FindLines]&#xD;
    FindPoint[p1 : {x1_, y1_}, p2 : {x2_, y2_}, R_, r_, side_] := Module[{d, x, y, vc1, vc2, p, sol, sol1, sol2, s1, s2, sr},&#xD;
      d = N@Sqrt[(x2 - x1)^2 + (y2 - y1)^2];&#xD;
      x = (d^2 - r^2 + R^2)/(2 d);&#xD;
      y = Sqrt[R^2 - x^2];&#xD;
      vc1 = Normalize[{x2 - x1, y2 - y1}];&#xD;
      vc2 = Cross[vc1];&#xD;
      p = {x1, y1} + x vc1;&#xD;
      {sol1, sol2} = {p + y vc2, p - y vc2};&#xD;
      s1 = Sign[Last[Cross[Append[(p2 - p1), 0], Append[(sol1 - p1), 0]]]];&#xD;
      s2 = Sign[Last[Cross[Append[(p2 - p1), 0], Append[(sol2 - p1), 0]]]];&#xD;
      sr = If[side === Left, 1, -1];&#xD;
      Switch[sr, s1,&#xD;
       sol1&#xD;
       ,&#xD;
       s2&#xD;
       ,&#xD;
       sol2&#xD;
       ]&#xD;
      ]&#xD;
&#xD;
This finds on the side &amp;#039;side&amp;#039; (Left/Right) the intersection point of two circles positioned at p1 and p2, with radii R and r, respectively. And now we can easily compute all the little vertices/joints of our beast:&#xD;
&#xD;
    FindLines[\[Theta]_] := Module[{p1, p2, p3, p4, p5, p6, p7, p8, p10, p11, p12, p13, p14, p15},&#xD;
      {p1, p2, p3, p4, p5, p6, p7, p8, p10, p11, p12, p13, p14, p15} = FindPoints[\[Theta]];&#xD;
      {{p1, p2}, {p2, p3}, {p3, p4}, {p1, p4}, {p2, p6}, {p4, p6}, {p3, p5}, {p4, p5}, {p5, p8}, {p6, p8}, {p6, p7}, {p7, p8}, {p1, &#xD;
        p11}, {p10, p11}, {p2, p10}, {p2, p13}, {p11, p13}, {p10, p12}, {p11, p12}, {p12, p14}, {p13, p14}, {p13, p15}, {p14, p15}}&#xD;
      ]&#xD;
    FindPoints[\[Theta]_] := Module[{p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16},&#xD;
      p1 = {0, 0};&#xD;
      p4 = {38, -7.8};&#xD;
      p11 = {-38, -7.8};&#xD;
      p2 = 15 {Cos[\[Theta]], Sin[\[Theta]]};&#xD;
      &#xD;
      p3 = FindPoint[p2, p4, 50, 41.5, Left];&#xD;
      p6 = FindPoint[p2, p4, 61.9, 39.3, Right];&#xD;
      p5 = FindPoint[p3, p4, 55.8, 41.5, Left];&#xD;
      p8 = FindPoint[p5, p6, 39.4, 36.7, Left];&#xD;
      p7 = FindPoint[p6, p8, 49, 65.7, Right];&#xD;
      &#xD;
      p10 = FindPoint[p2, p11, 50, 41.5, Right];&#xD;
      p13 = FindPoint[p2, p11, 61.9, 39.3, Left];&#xD;
      p12 = FindPoint[p10, p11, 55.8, 41.5, Right];&#xD;
      p14 = FindPoint[p12, p13, 39.4, 36.7, Right];&#xD;
      p15 = FindPoint[p13, p14, 49, 65.7, Left];&#xD;
      &#xD;
      {p1, p2, p3, p4, p5, p6, p7, p8, p10, p11, p12, p13, p14, p15}&#xD;
      ]&#xD;
&#xD;
Now we can plot it easily:&#xD;
&#xD;
    trajectoriesdata = (FindPoints /@ Subdivide[0, 2 Pi, 100])\[Transpose];&#xD;
    Manipulate[&#xD;
      Graphics[{Arrowheads[Large], Arrow /@ trajectoriesdata, Thick, Red, Line[FindLines[\[Theta]]]},&#xD;
       PlotRange -&amp;gt; {{-150, 150}, {-120, 70}}, &#xD;
       ImageSize -&amp;gt; 800&#xD;
      ]&#xD;
     ,&#xD;
     {\[Theta], 0, 2 \[Pi]}&#xD;
    ]&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
We can also make an entire bunch of legs at the same time and make a 3D beast!&#xD;
&#xD;
    Manipulate[&#xD;
     mp = 60;&#xD;
     n = 12;&#xD;
     \[CurlyPhi] = Table[Mod[5 \[Iota], n, 1], {\[Iota], 1, n}];&#xD;
     Graphics3D[{Darker@Yellow, Table[&#xD;
        Line[ &#xD;
         Map[Prepend[mp \[Iota]], &#xD;
          FindLines[\[Theta] + \[CurlyPhi][[\[Iota]]] (2 Pi/n)], {2}]],&#xD;
        {\[Iota], n}&#xD;
        ]&#xD;
       , Black, Line[{{mp 1, 0, 0}, {mp n, 0, 0}}]&#xD;
       }&#xD;
      ,&#xD;
      Lighting -&amp;gt; &amp;#034;Neutral&amp;#034;,&#xD;
      PlotRangePadding -&amp;gt; Scaled[.1],&#xD;
      PlotRange -&amp;gt; {{-mp, (n + 1) mp}, {-150, 150}, {-150, 150}},&#xD;
      Boxed -&amp;gt; False,&#xD;
      ImageSize -&amp;gt; 700&#xD;
      ]&#xD;
     ,&#xD;
     {\[Theta], 0, 2 \[Pi]}&#xD;
     ]&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
From the side we can look at how the legs of 4-pair-legged and 6-pair-legged versions of the beasts work:&#xD;
&#xD;
![enter image description here][9] ![enter image description here][10]&#xD;
&#xD;
Hope you enjoyed this! Perhaps someone else can make this thing actually walk over a (bumpy) surface?&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=LVDKumerus2.jpg&amp;amp;userId=73716&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-05-29at00.51.53.png&amp;amp;userId=73716&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=strandbeest_sketch.png&amp;amp;userId=73716&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=strandbeest_trajectories.png&amp;amp;userId=73716&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2016-05-29at00.16.23.png&amp;amp;userId=73716&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Strandbeest_Leg_Proportions-01.png&amp;amp;userId=73716&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=3493strandwalk.gif&amp;amp;userId=73716&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=3587strandwalk3D.gif&amp;amp;userId=73716&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=4legged.gif&amp;amp;userId=73716&#xD;
  [10]: http://community.wolfram.com//c/portal/getImageAttachment?filename=6legged.gif&amp;amp;userId=73716</description>
    <dc:creator>Sander Huisman</dc:creator>
    <dc:date>2016-05-28T23:02:16Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1023763">
    <title>[GIF] Plotting the Contours of Deformed Hyperspheres</title>
    <link>https://community.wolfram.com/groups/-/m/t/1023763</link>
    <description>Considered as a series reversion ( Cf. [Mathworld][1], [A&amp;amp;S][2] ) of implicit equation &#xD;
$$E = \frac{1}{2}\Psi^2 + \sum_{n=3}^{\infty} f_n(\phi,\theta,\ldots)\;\Psi^n,$$ &#xD;
function [A276738][3] determines the radius $\Psi$ of a hypersurface that limits in small $E$ to the shape of a perfect hypersphere, a circle, a sphere, etc... &#xD;
&#xD;
Examples in 2,3 dimensions lend themselves well to depiction. Let&amp;#039;s see the Henon Heiles Potential, and an octahedral Energy Surface.&#xD;
 &#xD;
## Basic Functions ##&#xD;
&#xD;
    RExp[n_] := Expand[b Plus[R[0], Total[b^# R[#] &amp;amp; /@ Range[n]]]]&#xD;
    &#xD;
    RCalc[n_] := &#xD;
    With[{basis = Subtract[Tally[Join[Range[n + 2], #]][[All, 2]],&#xD;
    Table[1, {n + 2}]] &amp;amp; /@ IntegerPartitions[n + 2][[3 ;; -1]]},&#xD;
    Total@ReplaceAll[Times[-2, Multinomial @@ #, v[Total[#]],&#xD;
    Times @@ Power[RSet[# - 1] &amp;amp; /@ Range[n + 2], #]] &amp;amp; /@ basis,&#xD;
    {Q^2 -&amp;gt; 1, v[2] -&amp;gt; 1/4}]]&#xD;
    &#xD;
    AbsoluteTiming[RSet[0] = 1;   Set[RSet[#], Expand@RCalc[#]] &amp;amp; /@ Range[20];][[1]]&#xD;
&#xD;
    Surface[Nexp_, rep_] :=   RExp[Nexp] /. R -&amp;gt; RSet /. &#xD;
    v[n_] :&amp;gt;  Function[{a}, &#xD;
    Total[v[#, a - #] Q^# P^(a - #) &amp;amp; /@ Range[0, a]]][n] /. &#xD;
    rep /. {P -&amp;gt; Sin[\[Phi]], Q -&amp;gt; Cos[\[Phi]]};&#xD;
    &#xD;
    HyperSurface[Nexp_, rep_] :=   RExp[Nexp] /. R -&amp;gt; RSet /. v[n_] :&amp;gt;    Function[{a}, &#xD;
    Total[Flatten@          Table[v[a - i - j, i, j] X^(a - i - j) Y^i Z^j, {i, 0,  a}, {j, 0, a - i}]]][n] /. &#xD;
    rep /. {X -&amp;gt; Sin[\[Theta]] Cos[\[Phi]], &#xD;
    Y -&amp;gt; Sin[\[Theta]] Sin[\[Phi]], Z -&amp;gt; Cos[\[Theta]]};&#xD;
&#xD;
## Print Pictures ##&#xD;
&#xD;
    ViewV = {1, 2, 2};&#xD;
    &#xD;
    TrigWords = &#xD;
    Flatten[Expand[      Surface[20, {v[2, 1] -&amp;gt; 3 \[Epsilon], v[0, 3] -&amp;gt; -\[Epsilon], &#xD;
    v[_, _] -&amp;gt; 0}]] /. Plus -&amp;gt; List /. Times -&amp;gt; List];&#xD;
    &#xD;
    TrigLines20 = &#xD;
    With[{surf =     Surface[20, {v[2, 1] -&amp;gt; 1/2, v[0, 3] -&amp;gt; -1/3/2, v[_, _] -&amp;gt; 0}]},&#xD;
    (surf /. b -&amp;gt; (#/10)) &amp;amp; /@ Range[5]];&#xD;
    &#xD;
    g1 = Show[&#xD;
    Graphics[{Lighter@Gray,  Text[#, RandomReal[{-1/2, 1}, 2]] &amp;amp; /@ TrigWords}, &#xD;
    PlotRange -&amp;gt; {{-1/2, 1}, {-1/2, 1}}], Graphics[{Thick,&#xD;
    {Dashed,  Line[Part[RotationMatrix[{{0, 0, 1}, ViewV}].#, &#xD;
    1 ;; 2] &amp;amp; /@ {{0, 0, -1/4}, {0, 0, 5/4}}]},&#xD;
    Thickness[.005],  MapThread[&#xD;
    Line[Function[{a},     N[Part[RotationMatrix[{{0, 0, 1}, &#xD;
    ViewV}].{#1 Cos[\[Phi]], #1 Sin[\[Phi]], #2/&#xD;
    10} /. {\[Phi] -&amp;gt; a}, 1 ;; 2]]] /@ (Range[0, 200]/&#xD;
    200 2 Pi)] &amp;amp;,&#xD;
    {TrigLines20, Range[5]}]}], ImageSize -&amp;gt; 800];&#xD;
    &#xD;
    OctSurf6 =   HyperSurface[&#xD;
    20, {v[4, 0, 0] -&amp;gt; \[Epsilon] 2/5, v[0, 4, 0] -&amp;gt; \[Epsilon] 2/5, &#xD;
    v[0, 0, 4] -&amp;gt; \[Epsilon] 2/5,&#xD;
    v[2, 2, 0] -&amp;gt; \[Epsilon] 6/5, v[2, 0, 2] -&amp;gt; \[Epsilon] 6/5, &#xD;
    v[0, 2, 2] -&amp;gt; \[Epsilon] 6/5, &#xD;
    v[_, _, _] -&amp;gt; 0} /. {\[Epsilon] -&amp;gt; -1/2}] /. b -&amp;gt; 6/10;&#xD;
    &#xD;
    OctSurf3 =   HyperSurface[&#xD;
    20, {v[4, 0, 0] -&amp;gt; \[Epsilon] 2/5, v[0, 4, 0] -&amp;gt; \[Epsilon] 2/5, &#xD;
    v[0, 0, 4] -&amp;gt; \[Epsilon] 2/5,&#xD;
    v[2, 2, 0] -&amp;gt; \[Epsilon] 6/5, v[2, 0, 2] -&amp;gt; \[Epsilon] 6/5, &#xD;
    v[0, 2, 2] -&amp;gt; \[Epsilon] 6/5, &#xD;
    v[_, _, _] -&amp;gt; 0} /. {\[Epsilon] -&amp;gt; -1/2}] /. b -&amp;gt; 3/10;&#xD;
    &#xD;
    OctWords =   Flatten[Expand[&#xD;
    HyperSurface[  10, {v[4, 0, 0] -&amp;gt; \[Epsilon] 2, v[0, 4, 0] -&amp;gt; \[Epsilon] 2, &#xD;
    v[0, 0, 4] -&amp;gt; \[Epsilon] 2 ,&#xD;
    v[2, 2, 0] -&amp;gt; \[Epsilon] 6 , v[2, 0, 2] -&amp;gt; \[Epsilon] 6 , &#xD;
    v[0, 2, 2] -&amp;gt; \[Epsilon] 6 , v[_, _, _] -&amp;gt; 0}]] /. &#xD;
    Plus -&amp;gt; List /. Times -&amp;gt; List];&#xD;
    &#xD;
    g2 = Show[   Graphics[{Lighter@Gray, &#xD;
    Text[#, RandomReal[{-2, 2}, 2]] &amp;amp; /@ OctWords}, &#xD;
    PlotRange -&amp;gt; 2 {{-1, 1}, {-1, 1}}],&#xD;
    Graphics[{     Thick, {Dashed, &#xD;
    Line[Part[RotationMatrix[{{0, 0, 1}, ViewV}].#, 1 ;; 2] &amp;amp; /@ {{0, 0, 2}, {0, 0, -2}}]},&#xD;
    Thickness[.005],&#xD;
    Line /@       Outer[N[Part[&#xD;
    RotationMatrix[{{0, 0, 1}, &#xD;
    ViewV}].{Sin[\[Theta]] Cos[\[Phi]], &#xD;
    Sin[\[Theta]] Sin[\[Phi]], &#xD;
    Cos[\[Theta]]} OctSurf3 /. {\[Theta] -&amp;gt; #1, \[Phi] -&amp;gt;  #2}, 1 ;; 2]] &amp;amp;, &#xD;
    Range[1, 9] Pi/10, Range[0, 100] 2 Pi/100, 1],&#xD;
    Line /@       Outer[N[Part[&#xD;
    RotationMatrix[{{0, 0, 1}, &#xD;
    ViewV}].{Sin[\[Theta]] Cos[\[Phi]], &#xD;
    Sin[\[Theta]] Sin[\[Phi]], &#xD;
    Cos[\[Theta]]} OctSurf6 /. {\[Theta] -&amp;gt; #1, \[Phi] -&amp;gt;   #2}, 1 ;; 2]] &amp;amp;, &#xD;
    Range[1, 9] Pi/10, Range[0, 200] 2 Pi/200, 1]&#xD;
    }], ImageSize -&amp;gt; 800];&#xD;
## Henon Heiles ##&#xD;
![Henon Heiles][4]&#xD;
## Octahedral  ##&#xD;
![enter image description here][5]&#xD;
&#xD;
What&amp;#039;s more curious than these graphics? The **new conjecture**: that  [A276738][6] can be defined in terms of [A028338][7].&#xD;
&#xD;
&#xD;
  [1]: http://mathworld.wolfram.com/SeriesReversion.html&#xD;
  [2]: http://people.math.sfu.ca/~cbm/aands/page_16.htm&#xD;
  [3]: https://oeis.org/A276738&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=HenonHeiles.png&amp;amp;userId=234448&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Octahedral.png&amp;amp;userId=234448&#xD;
  [6]: https://oeis.org/A276738&#xD;
  [7]: http://oeis.org/A028338</description>
    <dc:creator>Brad Klee</dc:creator>
    <dc:date>2017-03-01T20:15:02Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/953623">
    <title>[GIF] A to Z (Image morph)</title>
    <link>https://community.wolfram.com/groups/-/m/t/953623</link>
    <description>![Image morph][8]&#xD;
&#xD;
**A to Z**&#xD;
&#xD;
I&amp;#039;ve mentioned before that there&amp;#039;s a construction which gives a correspondence between points on the Grassmann manifold $G_2(\mathbb{R}^n)$ of 2-dimensional linear subspaces of $\mathbb{R}^n$ and planar $n$-gons; details at [1][1], [2][2], [3][3], [4][4], [5][5], [6][6]. &#xD;
&#xD;
In particular, this gives a way of morphing between any two (discrete) shapes you like; this animation shows the shortest path from A to Z.&#xD;
&#xD;
Here&amp;#039;s the code; notice that I use the [`smootheststep` function][7]:&#xD;
&#xD;
    ProjectionBasis[{A_, B_}, {C_, D_}] := &#xD;
      Normalize[#] &amp;amp; /@ &#xD;
       Eigenvectors[&#xD;
        Transpose[Transpose[{A, B}].{A, B}.Transpose[{C, D}].{C, D}], 2];&#xD;
    &#xD;
    PlaneGeo[{A_, B_}, {C_, D_}, t_] := &#xD;
      Module[{a, b, c, d, cPerp, dPerp, dist1, dist2},&#xD;
       {a, b} = ProjectionBasis[{C, D}, {A, B}];&#xD;
       {c, d} = ProjectionBasis[{A, B}, {C, D}];&#xD;
       {cPerp, dPerp} = {Normalize[c - (c.a)*a], Normalize[d - (d.b)*b]};&#xD;
       dist1 = ArcCos[a.c];&#xD;
       dist2 = ArcCos[b.d];&#xD;
       {Cos[t*dist1]*a + Sin[t*dist1]*cPerp, &#xD;
        Cos[t*dist2]*b + Sin[t*dist2]*dPerp}&#xD;
       ];&#xD;
    &#xD;
    MakePoly[data_] := &#xD;
      Normalize[#] &amp;amp; /@ &#xD;
       Transpose[{Re[#], Im[#]} &amp;amp; /@ &#xD;
         Sqrt[Table[#[[n]][[1]] + I*#[[n]][[2]], {n, 1, Length[#]}] &amp;amp;[&#xD;
           RotateLeft[#] - # &amp;amp;[data]]]];&#xD;
    &#xD;
    RawAData = {{-3., .9}, {1.07, 8.18}, {1.85, 8.2}, {5.96, 0.86}, {4.89,&#xD;
         0.86}, {1.77, 6.6}, {1.18, 6.6}, {.12, 4.58}, {2.87, 4.6}, {3.35,&#xD;
         3.76}, {-.18, 3.76}, {-1.72, .94}};&#xD;
    &#xD;
    RawZData = {{0.82, 7.26}, {7.61, 7.32}, {7.65, &#xD;
        6.04}, {1.92, -.06}, {7.76, -.02}, {7.8, -1.16}, {.71, -1.12}, \&#xD;
    {.71, .02}, {6.36, 6.12}, {.85, 6.12}, {.82, 6.12}, {.82, 7.26}};&#xD;
    &#xD;
    ToPol[frame_] := &#xD;
      Accumulate[ReIm[(Complex @@ #)^2] &amp;amp; /@ Transpose[frame]];&#xD;
    &#xD;
    smootheststep[t_] := -20 t^7 + 70 t^6 - 84 t^5 + 35 t^4;&#xD;
    &#xD;
    DynamicModule[{cols = RGBColor /@ {&amp;#034;#f77e5e&amp;#034;, &amp;#034;#3dbd5d&amp;#034;, &amp;#034;#303030&amp;#034;}, &#xD;
      centeredpoints, s},&#xD;
     Manipulate[&#xD;
      s = smootheststep[t];&#xD;
      centeredpoints = # - ConstantArray[Mean[#], Length[#]] &amp;amp;[&#xD;
        RotationTransform[(26 - 44 s) Degree][&#xD;
         Prepend[ToPol[&#xD;
           PlaneGeo[MakePoly[RawAData], MakePoly[RawZData], s]], {0, 0}]]];&#xD;
      Graphics[{Thickness[.008], JoinForm[&amp;#034;Round&amp;#034;], &#xD;
        Blend[cols[[;; 2]], s], Line[centeredpoints]}, &#xD;
       ImageSize -&amp;gt; {540, 540}, &#xD;
       PlotRange -&amp;gt; {{-.26 + .02 s, .29 + .02 s}, {-.28 - .065 s, .32 - .065 s}}, Background -&amp;gt; cols[[-1]]], {t, 0, 1}]&#xD;
     ]&#xD;
&#xD;
&#xD;
[1]: http://community.wolfram.com/groups/-/m/t/760148&#xD;
[2]: http://community.wolfram.com/groups/-/m/t/782316&#xD;
[3]: http://community.wolfram.com/groups/-/m/t/783758&#xD;
[4]: http://community.wolfram.com/groups/-/m/t/785078&#xD;
[5]: http://community.wolfram.com/groups/-/m/t/787596&#xD;
[6]: http://community.wolfram.com/groups/-/m/t/865171&#xD;
[7]: https://en.wikipedia.org/wiki/Smoothstep&#xD;
[8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=azdance2.gif&amp;amp;userId=610054</description>
    <dc:creator>Clayton Shonkwiler</dc:creator>
    <dc:date>2016-11-01T22:22:30Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1214169">
    <title>Jigsaw Puzzle</title>
    <link>https://community.wolfram.com/groups/-/m/t/1214169</link>
    <description>![enter image description here][1]&#xD;
&#xD;
Dear all, from the resemblance of a Voronoi mesh to a jigsaw puzzle I came to the idea for the following little program I want to share. The essential function is &#xD;
&#xD;
    (* in: points p1, p2;&#xD;
      out: BSplineCurve = jigsaw side if distance &amp;gt; minLength;  *)&#xD;
    jigsawSide[minLength_][pts : {p1_, p2_}] := Module[{m, u, o, vx, vy, n, dist, r, c, angle0, cPts},&#xD;
      dist = EuclideanDistance @@ pts;&#xD;
      If[dist &amp;lt; minLength, Return[Line[pts]]];&#xD;
      (* avoid borders: *)      &#xD;
      If[Times @@ (p2 - p1) == 0, Return[Line[pts]]];&#xD;
      m = Mean[pts];&#xD;
      {u, o} = SortBy[pts, Last];  (* lower/upper point *)&#xD;
      {vx, vy} = o - u; &#xD;
      n = {vy, -vx};  (* normal vector *)&#xD;
      r = .15 dist;  (* radius *)&#xD;
      c = m + n/4.;  (* center *)&#xD;
      angle0 = Sign[Last[n]] VectorAngle[{1, 0}, n];&#xD;
      (* points on circle: *)&#xD;
      cPts = c + r {Cos[angle0 + #], Sin[angle0 + #]} &amp;amp; /@ (60 \[Degree] {-2, -1, 0, 1, 2});&#xD;
      Return[BSplineCurve[{u, m, Sequence @@ cPts, m, o}]]&#xD;
      ]&#xD;
   &#xD;
which connects two points with a `BSplineCurve` having the typical elementary shape of a jigsaw puzzle. If the distance is too short then the connection becomes a straight line. The same happens if the points share the same x- or y-coordinate to exclude the jigsaws borders. Here is a simple test of the function:&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
Anything else is straightforward:&#xD;
&#xD;
 - start with &amp;#034;randomized&amp;#034; lattice points;&#xD;
 - from these a Voronoi mesh is created;&#xD;
 - extract its polygons;&#xD;
 - convert the polygon sides into the new (puzzle) shape;&#xD;
 - build new polygons out of these  sides;&#xD;
 - apply a texture.&#xD;
&#xD;
The result is a bunch of jigsaw pieces one can play with:&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
I was impressed by the consistent behavior of `Texture`. The whole (short) code is attached.&#xD;
&#xD;
Best regards -- Henrik&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=9927ezgif.com-optimize.gif&amp;amp;userId=11733&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=PieceSide.gif&amp;amp;userId=32203&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=JigsawsExample.png&amp;amp;userId=32203</description>
    <dc:creator>Henrik Schachner</dc:creator>
    <dc:date>2017-11-04T19:25:59Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2858759">
    <title>Hat tilings via HTPF equivalence</title>
    <link>https://community.wolfram.com/groups/-/m/t/2858759</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=HattilingsviaHTPFequivalence.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/8834ec94-ab97-4b06-9446-1654c806e062</description>
    <dc:creator>Brad Klee</dc:creator>
    <dc:date>2023-03-24T23:19:15Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2944810">
    <title>Extending the computational range of ChatGPT-4: optimizing prompts for enhanced performance</title>
    <link>https://community.wolfram.com/groups/-/m/t/2944810</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=g43tgeffqv.jpeg&amp;amp;userId=11733&#xD;
  [2]: https://www.wolframcloud.com/obj/3b67604b-43d1-492d-b1c5-13046827d805</description>
    <dc:creator>Michael Trott</dc:creator>
    <dc:date>2023-06-27T16:24:23Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1561288">
    <title>3D version of the built-in VoronoiDiagram</title>
    <link>https://community.wolfram.com/groups/-/m/t/1561288</link>
    <description>**[Open in Cloud][1] | [See Original][2] | Download to Desktop via Attachments Below**&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][4]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/objects/wolfram-community/3D-version-of-the-built-in-VoronoiDiagram-by-Chip-Hurst&#xD;
  [2]: https://mathematica.stackexchange.com/questions/18893/how-can-i-define-a-3d-version-of-the-built-in-voronoidiagram-voronoimesh-in-v10&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=chip2.png&amp;amp;userId=20103&#xD;
  [4]: https://www.wolframcloud.com/obj/fcd0f8eb-5939-43fa-a040-4b0705220700</description>
    <dc:creator>Greg Hurst</dc:creator>
    <dc:date>2018-11-28T19:03:50Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1025180">
    <title>The Chaos Game - Sierpinski triangles and beyond - part I</title>
    <link>https://community.wolfram.com/groups/-/m/t/1025180</link>
    <description>EDIT: See also the follow up posts [here.][1] and [here][2].&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
Roughly 8-9 years ago a friend of mine told me I could make the Sierpinski triangle by starting at one of the vertices of an equilateral triangle, and then repeatedly jump half-way to one of the (randomly chosen) vertices.&#xD;
&#xD;
## 0 memory ##&#xD;
&#xD;
The following code will accomplish that:&#xD;
&#xD;
    ClearAll[sequence]&#xD;
    sequence[n_,m_]:=RandomChoice[Range[n],m]&#xD;
    pts=N@CirclePoints[3];&#xD;
    pts=FoldList[(#1+pts[[#2]])/2&amp;amp;,RandomChoice[pts],sequence[3,10]]&#xD;
    Graphics[{{FaceForm[],EdgeForm[Black],RegularPolygon[3]},Red,Arrow[Partition[pts,2,1]]}]&#xD;
&#xD;
giving:&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
If one does this 1000s of time, and only mark the viewed points, one will get:&#xD;
&#xD;
    ClearAll[sequence]&#xD;
    sequence[n_,m_]:=RandomChoice[Range[n],m]&#xD;
    pts=N@CirclePoints[3];&#xD;
    pts=FoldList[(#1+pts[[#2]])/2&amp;amp;,RandomChoice[pts],sequence[3,25000]];&#xD;
    Graphics[{FaceForm[],EdgeForm[Black],RegularPolygon[3],PointSize[0.001],Point[pts]}]&#xD;
&#xD;
giving:&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
Which will indeed show that by randomly choosing a vertex we can still get structure! Quite a surprise! Of course we can do this with squares, pentagons, hexagons et cetera:&#xD;
&#xD;
    ClearAll[sequence]&#xD;
    sequence[n_,m_]:=RandomChoice[Range[n],m]&#xD;
    Table[&#xD;
        circlepoints=N@CirclePoints[n];&#xD;
        pts=FoldList[(#1+circlepoints[[#2]])/2&amp;amp;,RandomChoice[circlepoints],sequence[n,50000]];&#xD;
        Rasterize[Graphics[{FaceForm[],EdgeForm[Black],RegularPolygon[n],PointSize[0.001],Point[pts]},ImageSize-&amp;gt;500,PlotRange-&amp;gt;1.1],&amp;#034;Image&amp;#034;]&#xD;
    ,&#xD;
        {n,3,8}&#xD;
    ] // Partition[#, 3] &amp;amp; // ImageAssemble&#xD;
&#xD;
giving:&#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
Very neat! (apart from 4, which just gives a homogeneous distribution of points). Here I run the  pentagon many many points and high resolution to get:&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
Where now the gray-color represents the density of points.&#xD;
&#xD;
## 0 memory - restricted ##&#xD;
&#xD;
Now we can make the dynamics a bit more interesting by not moving to any other vertex but to only specific vertices. Imagine that we are at some position p, then we always have n choices (n being the number of sides): we can jump to the vertex 1 ahead, 2 ahead, .... n ahead (same as last time). &#xD;
&#xD;
    ClearAll[CreateSequence,CreateSequenceImage]&#xD;
    CreateSequence[n_,steps_,choices_]:=Mod[Accumulate[RandomChoice[choices,steps-1]~Prepend~1],n,1]&#xD;
    CreateSequenceImage[n_,m_,choices_]:=Module[{seq,pts},&#xD;
        seq=CreateSequence[n,m,choices];&#xD;
        pts=N@CirclePoints[n];&#xD;
        seq=FoldList[(#1+pts[[#2]])/2&amp;amp;,First[pts],seq];&#xD;
        Rasterize[Graphics[{PointSize[0.001],Point[seq]},ImageSize-&amp;gt;500,PlotRange-&amp;gt;1],&amp;#034;Image&amp;#034;,RasterSize-&amp;gt;{300,300}]&#xD;
    ]&#xD;
&#xD;
For a 3 sided polygon (i&amp;#039;ve been told these are called triangles) we can jump 1, 2, or 3 ahead or subsets of that:&#xD;
&#xD;
    Grid[Join@@@Partition[{#,CreateSequenceImage[3,10^5,#]}&amp;amp;/@Subsets[Range[3],{1,\[Infinity]}],UpTo[3]],Frame-&amp;gt;All]&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
Some interesting structure can be seen for some of the subsets.&#xD;
&#xD;
For squares:&#xD;
&#xD;
    Grid[Join@@@Partition[{#,CreateSequenceImage[4,10^5,#]}&amp;amp;/@Subsets[Range[4],{1,\[Infinity]}],UpTo[4]],Frame-&amp;gt;All]&#xD;
&#xD;
![enter image description here][9]&#xD;
&#xD;
and for pentagons:&#xD;
&#xD;
    Grid[Join@@@Partition[{#,CreateSequenceImage[5,10^5,#]}&amp;amp;/@Subsets[Range[5],{1,\[Infinity]}],UpTo[4]],Frame-&amp;gt;All]&#xD;
&#xD;
![enter image description here][10]&#xD;
&#xD;
the higher the number of sides, the more subsets we can choose. The number of subsets scales as 2^n -1 (minus one because the set can not be empty; we have to jump somewhere!).&#xD;
&#xD;
Lastly, for hexagons:&#xD;
&#xD;
    Grid[Join@@@Partition[{#,CreateSequenceImage[5,10^5,#]}&amp;amp;/@Subsets[Range[5],{1,\[Infinity]}],UpTo[4]],Frame-&amp;gt;All]&#xD;
&#xD;
![enter image description here][11]&#xD;
&#xD;
Ok, you can try polygons with large number of sides on your own, but note that the number of subsets doubles every time.&#xD;
&#xD;
## 1 memory - restricted ##&#xD;
&#xD;
We can even go beyond this, and consider the position of the penultimate vertex as well:&#xD;
&#xD;
![enter image description here][12]&#xD;
&#xD;
We can consider 5 cases for a pentagon (or, in general, n cases). We will consider the last point to be at position 0 (or n), now the penultimate vertex could be in 5 different positions. For each of these combinations we can choose a different subset of {1,2,3,4,5}. Just to get an idea how many possibilities we now have:&#xD;
&#xD;
the number of subsets is 2^n - 1, and we have to choose n of these, so there will be (2^n-1)^n different systems to explore:&#xD;
    &#xD;
    Table[{n, (2^n - 1)^n}, {n, 3, 8}] // Grid&#xD;
&#xD;
![enter image description here][13]&#xD;
&#xD;
as one can see, the combination grow very quickly.&#xD;
&#xD;
    ClearAll[Stamp,CreateSequence2,CreateSequenceImage2]&#xD;
    CreateSequence2[n_,m_,start:{start1_,start2_},choices_]:=Module[{out,last, penultimate,new,pos2},&#xD;
        {penultimate,last}=out=start;&#xD;
        out=Reap[Do[&#xD;
            pos2=Mod[penultimate-last,n,1];&#xD;
            new=Mod[last+RandomChoice[choices[[pos2]]],n,1];&#xD;
            penultimate=last;&#xD;
            last=new;&#xD;
            Sow[new]&#xD;
        ,&#xD;
            {m-2}&#xD;
        ]][[2,1]];&#xD;
        Join[start,out]&#xD;
    ]&#xD;
    Stamp[n_,choices_]:=Module[{},&#xD;
        Image[Normal[SparseArray[Thread[Join@@MapThread[Thread[{#1,#2}]&amp;amp;,{Range[Length[choices]],choices}]-&amp;gt;1],{n,n}]]]&#xD;
    ]&#xD;
    CreateSequenceImage2[n_,m_,start:{start1_,start2_},choices_]:=Module[{seq,pts,ras,stamp},&#xD;
        seq=CreateSequence2[n,m,start,choices];&#xD;
        pts=N@CirclePoints[n];&#xD;
        seq=FoldList[(#1+pts[[#2]])/2&amp;amp;,First[pts],seq];&#xD;
        ras=Rasterize[Graphics[{PointSize[0.001],Point[seq]},ImageSize-&amp;gt;500,PlotRange-&amp;gt;1],&amp;#034;Image&amp;#034;,RasterSize-&amp;gt;{300,300}];&#xD;
        stamp=ImagePad[Stamp[n,choices],1,Red];&#xD;
        ImageCompose[ras,stamp,{Center,Bottom},{Center,Bottom}]&#xD;
    ]&#xD;
&#xD;
Before looking at the general case, we can look at a small subset, namely one can **not** jump i ahead from the last, and j ahead from the penultimate. Here the example for i=1, and j =3:&#xD;
&#xD;
    ClearAll[JumpPos2]&#xD;
    JumpPos2[n_,{d1_,d2_}]:=Module[{pos},&#xD;
        pos=Range[n];&#xD;
        pos=DeleteCases[pos,d1];&#xD;
        DeleteCases[pos,Mod[d2+#,n,1]]&amp;amp;/@Range[n]&#xD;
    ]&#xD;
    CreateSequenceImage2[4,10^4,{1,2},JumpPos2[4,{1,3}]]&#xD;
&#xD;
![enter image description here][14]&#xD;
&#xD;
Very neat structure! Of course we can try all i and j from the set {1,2,3,4}:&#xD;
&#xD;
    delta=Tuples[Range[4],2];&#xD;
    deltas=JumpPos2[4,#]&amp;amp;/@delta;&#xD;
    Grid[Join@@@Table[{{i,j},CreateSequenceImage2[4,10^4,{1,2},JumpPos2[4,{i,j}]]},{i,4},{j,4}],Frame-&amp;gt;All]&#xD;
&#xD;
![enter image description here][15]&#xD;
&#xD;
All very neat, but it is just a small subset of the 50625 possibilities. Here let&amp;#039;s try 64 random ones:&#xD;
&#xD;
    sc=Reverse@Subsets[Range[4],{1,\[Infinity]}];&#xD;
    Table[&#xD;
       CreateSequenceImage2[4,10^4,{1,2},RandomChoice[sc,4]]&#xD;
    ,&#xD;
        {64}&#xD;
    ] // Partition[#,8]&amp;amp; // ImageAssemble&#xD;
&#xD;
![enter image description here][16]&#xD;
 &#xD;
As you can see very nice and rich structure! Notice that I &amp;#039;stamped&amp;#039; all of them with their &amp;#039;input&amp;#039;:&#xD;
&#xD;
    CreateSequenceImage2[4, 10^4, {1, 2}, {{1, 4}, {3}, {1, 3, 4}, {1, 2, 3}}]&#xD;
&#xD;
![enter image description here][17]&#xD;
&#xD;
And if one looks closely (save the image and zoom), one will see the &amp;#039;stamp&amp;#039; (or the rule) at the bottom:&#xD;
&#xD;
![enter image description here][18] &#xD;
&#xD;
This can be read as follows: &#xD;
    &#xD;
 - The first (top) line, the white pixels are in places 1 and 4, so if the penultimate vertex was &amp;#039;1&amp;#039;, move 1 or 4 places from the last vertex&#xD;
 - The 2nd line, the white pixel is in place 3, jump the position 3 ahead compared to last vertex&#xD;
 - 3rd line, white pixel at 1,3, and 4. &#xD;
 - 4th line 1, 2, or 3.&#xD;
&#xD;
Basically the nth line corresponds to the position of the penultimate vertex. and the white pixels corresponds to &amp;#039;allowed&amp;#039; number of jumps.&#xD;
&#xD;
I&amp;#039;ll stop here for now. There are many more ideas to explore, I&amp;#039;ll name a few:&#xD;
&#xD;
 - &amp;lt;s&amp;gt;3D positions, 3D images&amp;lt;/s&amp;gt; See below the post of Henrik!&#xD;
 - Anything other than regular polygons&#xD;
 - Have different probabilities for each of the vertices...&#xD;
 - Move in the perpendicular direction&#xD;
 - ...&#xD;
&#xD;
See also the follow up posts [here.][19] and [here][20] and some additional visualizations below!&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com/groups/-/m/t/1039030&#xD;
  [2]: http://community.wolfram.com/groups/-/m/t/1047603&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=opener.png&amp;amp;userId=73716&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial1.png&amp;amp;userId=73716&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial2.png&amp;amp;userId=73716&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=3446trial3.png&amp;amp;userId=73716&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial4b.jpg&amp;amp;userId=73716&#xD;
  [8]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial5.png&amp;amp;userId=73716&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial6.png&amp;amp;userId=73716&#xD;
  [10]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial7.png&amp;amp;userId=73716&#xD;
  [11]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial8.png&amp;amp;userId=73716&#xD;
  [12]: http://community.wolfram.com//c/portal/getImageAttachment?filename=explanation-01.png&amp;amp;userId=73716&#xD;
  [13]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial9.png&amp;amp;userId=73716&#xD;
  [14]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial10.png&amp;amp;userId=73716&#xD;
  [15]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial11.png&amp;amp;userId=73716&#xD;
  [16]: http://community.wolfram.com//c/portal/getImageAttachment?filename=5983trial12.png&amp;amp;userId=73716&#xD;
  [17]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial13.png&amp;amp;userId=73716&#xD;
  [18]: http://community.wolfram.com//c/portal/getImageAttachment?filename=trial14.png&amp;amp;userId=73716&#xD;
  [19]: http://community.wolfram.com/groups/-/m/t/1039030&#xD;
  [20]: http://community.wolfram.com/groups/-/m/t/1047603</description>
    <dc:creator>Sander Huisman</dc:creator>
    <dc:date>2017-03-04T21:41:21Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3545275">
    <title>Bloom pattern for flat-foldable origami orbital solar sail or solar shield</title>
    <link>https://community.wolfram.com/groups/-/m/t/3545275</link>
    <description>![Bloom pattern for flat-foldable origami orbital solar sail or solar shield][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=8711FoldingPanel1.gif&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/d629766d-966c-4dcb-8880-894747e31c6d</description>
    <dc:creator>Gilmer Gary</dc:creator>
    <dc:date>2025-09-14T03:12:52Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2142619">
    <title>Love heart jewelry I: 3D printing of parametric region</title>
    <link>https://community.wolfram.com/groups/-/m/t/2142619</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2020-12-19at3.59.46PM.jpg&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/4e3fd64d-1b64-4070-8b33-defd8a719cc5&#xD;
&#xD;
 [Original]: https://www.wolframcloud.com/obj/wolfram-community/Published/LoveHeartJewelry_1.nb</description>
    <dc:creator>Frederick Wu</dc:creator>
    <dc:date>2020-12-19T18:18:44Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/418720">
    <title>Calculus of the perfectly centered break of a perfectly aligned pool ball rack</title>
    <link>https://community.wolfram.com/groups/-/m/t/418720</link>
    <description>## This is it. The perfectly centered billiards break. Behold:&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
&amp;lt;h2&amp;gt;Setup&amp;lt;/h2&amp;gt;&#xD;
&#xD;
This break was computed in *Mathematica* using a numerical differential equations model.  Here are a few details of the model:&#xD;
&#xD;
* All balls are assumed to be perfectly [elastic][3] and almost perfectly rigid.&#xD;
* Each ball has a mass of 1 unit and a radius of 1 unit.&#xD;
* The cue ball has a initial speed of 10 units/sec.&#xD;
* The force between two balls is given by the formula $$F \;=\; \begin{cases}0 &amp;amp; \text{if }d \geq 2, \\ 10^{11}(2-d)^{3/2} &amp;amp; \text{if }d &amp;lt; 2, \end{cases}$$ where $d$ is the distance between the centers of the balls.  Note that the balls overlap if and only if $d &amp;lt; 2$.  The power of $3/2$ was [suggested by Yoav Kallus][4] on Math Overflow, because it follows [Hertz&amp;#039;s theory of non-adhesive elastic contact](https://en.wikipedia.org/wiki/Contact_mechanics#Hertzian_theory_of_non-adhesive_elastic_contact).&#xD;
&#xD;
The initial speed of the cue ball is immaterial -- slowing down the cue ball is the same as slowing down time. The force constant $10^{11}$ has no real effect as long as it&amp;#039;s large enough, although it does change the speed at which the initial collision takes place.&#xD;
&#xD;
&amp;lt;h2&amp;gt;The Collision&amp;lt;/h2&amp;gt;&#xD;
&#xD;
For this model, the entire collision takes place in the first 0.2 milliseconds, and none of the balls overlap by more than 0.025% of their radius during the collision.  (These figures are model dependent -- real billiard balls may collide faster or slower than this.)&#xD;
&#xD;
The following animation shows the forces between the balls during the collision, with the force proportional to the area of each yellow circle.  Note that the balls themselves hardly move at all *during* the collision, although they do accelerate quite a bit.&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
&amp;lt;h2&amp;gt;The Trajectories&amp;lt;/h2&amp;gt;&#xD;
&#xD;
The following picture shows the trajectories of the billiard balls after the collision.&#xD;
&#xD;
![enter image description here][6]&#xD;
&#xD;
After the collision, some of the balls are travelling considerably faster than others.  The following table shows the magnitude and direction of the velocity of each ball, where $0^\circ$ indicates straight up.&#xD;
&#xD;
&#xD;
$\begin{array}{|c|c|c|c|c|c|c|c|c|c|c|}&#xD;
\hline&#xD;
\text{ball} &amp;amp; \text{cue} &amp;amp; 1 &amp;amp; 2,3 &amp;amp; 4,6 &amp;amp; 5 &amp;amp; 7,10 &amp;amp; 8,9 &amp;amp; 11,15 &amp;amp; 12,14 &amp;amp; 13 \\&#xD;
\hline&#xD;
\text{angle} &amp;amp; 0^\circ &amp;amp; 0^\circ &amp;amp; 40.1^\circ &amp;amp; 43.9^\circ &amp;amp; 0^\circ &amp;amp; 82.1^\circ &amp;amp; 161.8^\circ &amp;amp; 150^\circ &amp;amp; 178.2^\circ &amp;amp; 180^\circ \\&#xD;
\hline&#xD;
\text{speed} &amp;amp; 1.79 &amp;amp; 1.20 &amp;amp; 1.57 &amp;amp; 1.42 &amp;amp; 0.12 &amp;amp; 1.31 &amp;amp; 0.25 &amp;amp; 5.60 &amp;amp; 2.57 &amp;amp; 2.63 \\&#xD;
\hline&#xD;
\end{array}&#xD;
$&#xD;
&#xD;
&#xD;
For comparison, remember that the initial speed of the cue ball was 10 units/sec.  Thus, balls 11 and 15 (the back corner balls) shoot out at more than half the speed of the original cue ball, whereas ball 5 slowly rolls upwards at less than 2% of the speed of the original cue ball.&#xD;
&#xD;
By the way, if you add up the sum of the squares of the speeds of the balls, you get 100, since kinetic energy is conserved.&#xD;
&#xD;
&#xD;
&amp;lt;h2&amp;gt;Linear and Quadratic Responses&amp;lt;/h2&amp;gt;&#xD;
&#xD;
The results of this model are dependent on the power of $3/2$ in the force law -- other force laws give other breaks.  For example, we could try making the force a linear function of the overlap distance (in analogy with springs and [Hooke&amp;#039;s law][7]), or we could try making the force proportional to the  *square* of the overlap distance.  The results are noticeably different&#xD;
&#xD;
![enter image description here][8] ![enter image description here][9]&#xD;
&#xD;
&#xD;
&amp;lt;h2&amp;gt;Stiff Response&amp;lt;/h2&amp;gt;&#xD;
&#xD;
Glenn the Udderboat points out that &amp;#034;stiff&amp;#034; balls might be best approximated by a force response involving a higher power of the distance (although this isn&amp;#039;t the [usual definition][10] of &amp;#034;stiffness&amp;#034;).  Unfortunately, the calculation time in *Mathematica* becomes longer when the power is increased, presumably because it needs to use a smaller time step to be sufficiently accurate.&#xD;
&#xD;
Here is a simulation involving a reasonably &amp;#034;stiff&amp;#034; force law&#xD;
$$F \;=\; \begin{cases}0 &amp;amp; \text{if }d \geq 2, \\ 10^{54}(2-d)^{10} &amp;amp; \text{if }d&amp;lt;2. \end{cases}$$&#xD;
&#xD;
![enter image description here][11]&#xD;
&#xD;
As you can see, the result is very similar to my first thought:&#xD;
&#xD;
&amp;gt; The two balls in the back corners shoot away along rays parallel to the two sides of the triangle.  Here is a picture showing the forces, with each force vector emanating from the point of contact.&#xD;
&#xD;
&amp;gt; ![enter image description here][12]&#xD;
&#xD;
This seems like good evidence that above 1st-thought behavior is indeed the limiting behavior in the case where the stiffness goes to infinity. As you might expect, most of the energy in this case is transferred very quickly at the beginning of the collision.  Almost all of the energy has moves to the back corner balls in the first 0.02 milliseconds.  Here is an animation of the forces:&#xD;
&#xD;
&#xD;
![enter image description here][13]&#xD;
&#xD;
After that, the corner balls and the cue ball shoot out, and the remaining balls continue to collide gently for the next millisecond or so.&#xD;
&#xD;
While the simplicity of this behavior is appealing, I would guess that &amp;#034;real&amp;#034; billard balls do not have such a stiff force response.  Of the models listed here, the intial Hertz-based model is probably the most accurate.  Qualitatively, it certainly seems the closest to an &amp;#034;actual&amp;#034; break.&#xD;
&#xD;
&amp;lt;h2&amp;gt; Full Code &amp;lt;/h2&amp;gt;&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][14]&#xD;
&#xD;
----------&#xD;
&#xD;
I wrote this post originally for [Math Stack Exchange][15].&#xD;
&#xD;
&#xD;
  [1]: http://math.bard.edu/belk/code.htm&#xD;
  [2]: http://i.stack.imgur.com/Y9ixR.gif&#xD;
  [3]: https://en.wikipedia.org/wiki/Elasticity_%28physics%29&#xD;
  [4]: http://mathoverflow.net/questions/156263/perfectly-centered-break-of-a-perfectly-aligned-pool-ball-rack/156407?noredirect=1#comment400402_156407&#xD;
  [5]: http://i.stack.imgur.com/WY37i.gif&#xD;
  [6]: http://i.stack.imgur.com/wHVJA.png&#xD;
  [7]: https://en.wikipedia.org/wiki/Hooke%27s_law&#xD;
  [8]: http://i.stack.imgur.com/a1l3b.gif&#xD;
  [9]: http://i.stack.imgur.com/xM76n.gif&#xD;
  [10]: https://en.wikipedia.org/wiki/Stiffness&#xD;
  [11]: http://i.stack.imgur.com/nMJyT.gif&#xD;
  [12]: http://i.stack.imgur.com/GKGT9.png&#xD;
  [13]: http://i.stack.imgur.com/VuUWT.gif&#xD;
  [14]: https://www.wolframcloud.com/obj/8c6b7e81-4a5c-4e3a-bb13-a3d47e728e64&#xD;
  [15]: http://math.stackexchange.com/a/659318/28293</description>
    <dc:creator>Jim Belk</dc:creator>
    <dc:date>2015-01-08T18:02:10Z</dc:date>
  </item>
</rdf:RDF>

