[Sidefx-houdini-list] Space filling circles

herman herman02 at netvigator.com
Thu Aug 6 21:12:59 EDT 2009


this is something i wanna ask for a long time also for the circle packing, 
will take a look at the link n give it a try after my holidays!

thanks

----- Original Message ----- 
From: "Andrew D Lyons" <tstexture at gmail.com>
To: <sidefx-houdini-list at sidefx.com>
Sent: Friday, August 07, 2009 5:28 AM
Subject: Re: [Sidefx-houdini-list] Space filling circles


As an interesting side topic to this thread, you can get some pretty
nice voronoi break-up patterns from a similar network to that which I
posted above. Again it's based on voronoi patterns being the dual of
delaunay triangulation:

http://www.comp.lancs.ac.uk/~kristof/research/notes/voronoi/

I've put an example in a second post here:

http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&p=78063#78063

It would be great if SESI, or someone could wrap some of these up in SOPs...

Cheers

2009/8/6 Andrew D Lyons <tstexture at gmail.com>:
> Yep - sorry about the line wrapping on that post. There is a more
> succinct version of the script uploaded to here:
>
> http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&p=78063#78063
>
> Cheers
>
>
> 2009/8/6 David Johnson <daveinengland at gmail.com>:
>> I had to edit the example to fix the line wraps that the email put in, 
>> but
>> after that it ran just fine. Maybe someone could put it on odforce or in 
>> the
>> SideFX forum.
>>
>> Dave
>>
>> On Thu, Aug 6, 2009 at 6:58 AM, Steve Tucker <Steve.Tucker at starz.com> 
>> wrote:
>>
>>> Interesting. If I attempt to run this in a new file, it doesn't work.
>>> Can't create the geo object. If I cd /obj and then try running it, I get 
>>> a
>>> fatal exception error.
>>>
>>> - Steve
>>>
>>> Stephen Tucker, VFX Artist
>>> p: 416.682.5200 x 5363 | f: 416.682.5209
>>> Starz Media Canada Co. | 230 Richmond Street East | Toronto, ON M5A 1P4
>>> www.starzanimation.com
>>>
>>>
>>> -----Original Message-----
>>> From: sidefx-houdini-list-bounces at sidefx.com [mailto:
>>> sidefx-houdini-list-bounces at sidefx.com] On Behalf Of Andrew D Lyons
>>> Sent: Wednesday, August 05, 2009 7:07 PM
>>> To: sidefx-houdini-list at sidefx.com
>>> Subject: Re: [Sidefx-houdini-list] Space filling circles
>>>
>>> That's an interesting problem. Not exactly circular - but close:
>>>
>>> Drop this in a textport:
>>> #######################################################
>>>
>>> # Automatically generated script: Wednesday August 05, 16:06
>>> \set noalias = 1
>>> set saved_path = `execute("oppwf")`
>>> opcf /obj
>>>
>>> # Node circle_cells (Object/geo)
>>> opadd -n geo circle_cells
>>> oplocate -x 12.6117 -y 2.05949 circle_cells
>>> opspareds ' group { name "stdswitcher5" label "Transform"
>>> parm
>>> { name "keeppos" baseparm joinnext
>>> export none }
>>> parm { name "pre_xform" baseparm export
>>> none } parm
>>> { name "xOrd" baseparm joinnext export
>>> none }
>>> parm { name "rOrd" baseparm export none
>>> } parm {
>>> name "t" baseparm export all } parm {
>>> name "r"
>>> baseparm export all } parm { name "s"
>>> baseparm
>>> export none } parm { name "p" baseparm
>>> export none }
>>> parm { name "scale" baseparm export
>>> none } parm {
>>> name "lookatpath" baseparm export none } parm
>>> {
>>> name "lookup" baseparm export none }
>>> parm {
>>> name "pathobjpath" baseparm export none }
>>> parm {
>>> name "roll" baseparm export none } parm {
>>> name "pos"
>>> baseparm export none } parm { name
>>> "uparmtype"
>>> baseparm export none } parm { name
>>> "pathorient"
>>> baseparm export none } parm { name
>>> "up" baseparm
>>> export none } parm { name "bank" baseparm
>>> export none
>>> } } group { name "stdswitcher5_1" label
>>> "Material" parm
>>> { name "shop_materialpath" baseparm
>>> joinnext
>>> export none } parm { name "shop_materialopts"
>>> baseparm
>>> export none } } group { name "stdswitcher5_2"
>>> label "Render" parm { name "tdisplay"
>>> baseparm
>>> export none } parm { name "display"
>>> baseparm
>>> export none } parm { name "vm_phantom" label
>>> "Phantom"
>>> type toggle default { "0" } range { 0 1 }
>>> export none
>>> parmtag { "spare_category" "Render" } } parm {
>>> name "vm_renderable" label "Renderable" type
>>> toggle
>>> default { "1" } range { 0 1 } export
>>> none parmtag {
>>> "spare_category" "Render" } } group { name
>>> "folder0"
>>> label "Shading" parm { name "categories"
>>> label "Categories"
>>> type string default { "" } help "A
>>> list of tags which can be
>>> used to select the object" range { 0 1 }
>>> export none parmtag {
>>> "spare_category" "Shading" } } parm { name
>>> "reflectmask"
>>> label "Reflection Mask" type oplist
>>> default { "*" } range { 0
>>> 1 } export none parmtag { "oprelative" "/obj" }
>>> parmtag {
>>> "opfilter" "!!OBJ/GEOMETRY!!" } parmtag { "spare_category"
>>> "Shading"
>>> } parmtag { "opexpand" "1" } } parm {
>>> name "lightmask"
>>> label "Light Mask" type oplist
>>> default { "*" } range { 0 1 }
>>> export none parmtag { "oprelative" "/obj" }
>>> parmtag { "opfilter"
>>> "!!OBJ/LIGHT!!" } parmtag { "spare_category" "Shading" }
>>> parmtag {
>>> "opexpand" "1" } } parm { name
>>> "vm_volumefilter"
>>> label "Volume Filter" type string
>>> default { "gaussian" }
>>> menu { "box" "Box Filter"
>>> "gaussian" "Gaussian"
>>> "bartlett" "Bartlett (triangle)" "catrom"
>>> "Catmull-Rom"
>>> "hanning" "Hanning" "blackman" "Blackman"
>>> "sinc" "Sinc
>>> (sharpening)" } range { 0 1 }
>>> export none parmtag {
>>> "spare_category" "Shading" } } parm {
>>> name "vm_volumefilterwidth" label "Volume
>>> Filter Width"
>>> type float default { "1.5" }
>>> range { 0.001 5 } export none
>>> parmtag { "spare_category" "Shading" } } parm {
>>> name "vm_matte" label "Matte shading"
>>> type toggle default {
>>> "0" } range { 0 1 } export none
>>> parmtag { "spare_category"
>>> "Shading" } } } group { name "folder0_1"
>>> label "Sampling" parm { name "geo_velocityblur"
>>> label "Geometry Velocity Blur" type
>>> toggle default { "0" }
>>> range { 0 1 } export none
>>> parmtag { "spare_category" "Sampling"
>>> } } } group { name "folder0_2"
>>> label "Dicing"
>>> parm { name "vm_shadingquality" label "Shading
>>> Quality"
>>> type float default { "1" }
>>> range { 0 10 } export none
>>> parmtag { "spare_category" "Dicing" } } parm {
>>> name "vm_rayshadingquality" label "Ray Shading
>>> Quality"
>>> type float default { "1" }
>>> range { 0 10 } export none
>>> parmtag { "spare_category" "Dicing" } } }
>>> group {
>>> name "folder0_3" label "Geometry" parm {
>>> name "vm_rmbackface" label "Backface
>>> Removal (Mantra)"
>>> type toggle default { "0" }
>>> range { 0 1 } export none
>>> parmtag { "spare_category" "Geometry" } }
>>> parm {
>>> name "shop_geometrypath" label "Procedural
>>> Shader" type oppath
>>> default { "" } range { 0 1 }
>>> export none parmtag {
>>> "oprelative" "." } parmtag { "opfilter" "!!SHOP/GEOMETRY!!" }
>>> parmtag { "spare_category" "Geometry" } }
>>> parm {
>>> name "vm_rendersubd" label "Polygons As
>>> Subdivision (Mantra)"
>>> type toggle default { "0" }
>>> range { 0 1 } export none
>>> parmtag { "spare_category" "Geometry" } }
>>> parm {
>>> name "vm_renderpoints" label "Render As
>>> Points (Mantra)"
>>> type toggle default { "0" }
>>> range { 0 1 } export none
>>> parmtag { "spare_category" "Geometry" } }
>>> parm {
>>> name "vm_metavolume" label "Metaballs
>>> as Volume" type toggle
>>> default { "0" } range { 0 1 }
>>> export none parmtag {
>>> "spare_category" "Geometry" } } parm { name
>>> "vm_coving"
>>> label "Coving" type integer
>>> default { "1" } menu {
>>> "0" "Disable Coving" "1" "Coving for
>>> displacement/sub-d"
>>> "2" "Coving for all primitives" } range { 0
>>> 10 } export none
>>> parmtag { "spare_category" "Geometry" } }
>>> parm {
>>> name "vm_computeN" label "Automatically
>>> Compute Normals"
>>> type toggle default { "1" }
>>> range { 0 1 } export none
>>> parmtag { "spare_category" "Geometry" } } }
>>> } group
>>> { name "stdswitcher5_3" label "Misc" parm {
>>> name "use_dcolor"
>>> baseparm export none } parm { name
>>> "dcolor"
>>> baseparm export none } parm { name
>>> "picking" baseparm
>>> export none } parm { name "pickscript"
>>> baseparm
>>> export none } parm { name "caching"
>>> baseparm
>>> export none } parm { name "vport_shadeopen"
>>> baseparm
>>> export none } parm { name "vport_displayassubdiv"
>>> baseparm
>>> invisible export none } } ' circle_cells
>>> opset -S on circle_cells
>>> opparm circle_cells use_dcolor ( off )
>>> chautoscope circle_cells +tx +ty +tz +rx +ry +rz +sx +sy +sz
>>> opset -d on -r off -h off -f off -y off -t off -l off -s off -u off -c
>>> off -e on -b off -x off circle_cells
>>> opexprlanguage -s hscript circle_cells
>>> opcf circle_cells
>>>
>>> # Node circle1 (Sop/circle)
>>> opadd -n circle circle1
>>> oplocate -x 3.41176 -y 0.0882355 circle1
>>> opparm circle1 type ( poly ) orient ( zx ) rad ( 21 21 ) divs ( 100 )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off circle1
>>> opexprlanguage -s hscript circle1
>>>
>>> # Node triangulate2d1 (Sop/triangulate2d)
>>> opadd -n triangulate2d triangulate2d1
>>> oplocate -x 3.41176 -y -1.15882 triangulate2d1
>>> opparm triangulate2d1 refine ( on ) maxarea ( 2 ) minangle ( 30 )
>>> maxnewpts ( 19565 ) removeduplicatepoints ( off )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off triangulate2d1
>>> opexprlanguage -s hscript triangulate2d1
>>>
>>> # Node facet1 (Sop/facet)
>>> opadd -n facet facet1
>>> oplocate -x 3.50951 -y -3.19412 facet1
>>> opparm facet1 unique ( on )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off facet1
>>> opexprlanguage -s hscript facet1
>>>
>>> # Node foreach1 (Sop/foreach)
>>> opadd -n foreach foreach1
>>> oplocate -x 3.41176 -y -5.02471 foreach1
>>> chblockbegin
>>> chadd -t 0 0 foreach1 numrange2
>>> chkey -t 0 -v 10 -m 0 -a 0 -A 0 -T a -F 'nprims("../" + opinput(".",
>>> 0))-1' foreach1/numrange2
>>> chblockend
>>> opparm foreach1 fortype ( number ) numrange ( 0 numrange2 1 )
>>> opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c
>>> off -e on -b off foreach1
>>> opexprlanguage -s hscript foreach1
>>> opcf foreach1
>>>
>>> # Node each1 (Sop/each)
>>> opadd -n each each1
>>> oplocate -x 0.6102 -y 4.8513 each1
>>> chblockbegin
>>> chadd -t 0 0 each1 attribtol
>>> chkey -t 0 -v 0.001 -m 0 -a 0 -A 0 -T a -F 'ch("../attribtol")'
>>> each1/attribtol
>>> chadd -t 0 0 each1 attribval1
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>> chs("../forstamp") + "1", 0)' each1/attribval1
>>> chadd -t 0 0 each1 attribval2
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>> chs("../forstamp") + "2", 0)' each1/attribval2
>>> chadd -t 0 0 each1 attribval3
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>> chs("../forstamp") + "3", 0)' each1/attribval3
>>> chadd -t 0 0 each1 attrib
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F
>>> 'ifs(!!strcmp(chs("../fortype"), "attrib"), "", chs("../attrib"))'
>>> each1/attrib
>>> chadd -t 0 0 each1 group
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F
>>> 'ifs(!!strcmp(chs("../fortype"), "group"), "", stamps("..",
>>> chs("../forstamp"), ""))' each1/group
>>> chadd -t 0 0 each1 feedback
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '!ch("../mergeresults")'
>>> each1/feedback
>>> chblockend
>>> opparm each1 feedback ( feedback ) group ( group ) attrib ( attrib )
>>> attribval ( attribval1 attribval2 attribval3 ) attribtol ( attribtol )
>>> forpath ( .. )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off each1
>>> opexprlanguage -s hscript each1
>>>
>>> # Node delete2 (Sop/delete)
>>> opadd -n delete delete2
>>> oplocate -x 0.6102 -y 3.89295 delete2
>>> chblockbegin
>>> chadd -t 0 0 delete2 rangeend
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '$N' delete2/rangeend
>>> chadd -t 0 0 delete2 filter
>>> chkey -t 0 -v 1 -m 0 -a 0 -A 0 -T a -F 'stamp("../", "FORVALUE", 0)
>>> == prim("../" + opinput(".", 0), $PR, "__primnum", 0)' delete2/filter
>>> chblockend
>>> opparm delete2 negate ( keep ) groupop ( filter ) filter ( filter )
>>> pattern ( "" )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off delete2
>>> opexprlanguage -s hscript delete2
>>>
>>> # Node fit1 (Sop/fit)
>>> opadd -n fit fit1
>>> oplocate -x 0.610753 -y 0.946953 fit1
>>> opparm fit1 stdswitcher ( 2 2 2 ) method ( interp ) orderu ( 3 )
>>> orderv ( 3 ) smooth ( 0.343 ) scope ( breakpnt ) dataparmv ( uniform )
>>> closeu ( wu ) closev ( wv ) corners ( on )
>>> opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c
>>> off -e on -b off fit1
>>> opexprlanguage -s hscript fit1
>>>
>>> # Node circle1 (Sop/circle)
>>> opadd -n circle circle1
>>> oplocate -x 3.01075 -y 3.7 circle1
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off circle1
>>> opexprlanguage -s hscript circle1
>>>
>>> # Node resample1 (Sop/resample)
>>> opadd -n resample resample1
>>> oplocate -x 0.622517 -y 2.92353 resample1
>>> opparm resample1 edge ( on ) dolength ( off ) dosegs ( on ) segs ( 2 )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off resample1
>>> opexprlanguage -s hscript resample1
>>>
>>> # Node delete1 (Sop/delete)
>>> opadd -n delete delete1
>>> oplocate -x 0.610753 -y 1.85283 delete1
>>> chblockbegin
>>> chadd -t 0 0 delete1 rangeend
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '$N' delete1/rangeend
>>> chblockend
>>> opparm delete1 entity ( point ) groupop ( range ) range ( -1 rangeend )
>>> opset -d off -r off -h off -f off -y off -t on -l off -s off -u off -c
>>> off -e on -b off delete1
>>> opexprlanguage -s hscript delete1
>>> oporder -e each1 delete2 fit1 circle1 resample1 delete1
>>> opcf ..
>>>
>>> # Node __PRIMNUM (Sop/attribcreate)
>>> opadd -n attribcreate __PRIMNUM
>>> oplocate -x 3.41176 -y -4.07765 __PRIMNUM
>>> chblockbegin
>>> chadd -t 0 0 __PRIMNUM value1
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '$PR' __PRIMNUM/value1
>>> chblockend
>>> opparm __PRIMNUM name ( __primnum ) varname ( __PRIMNUM ) class (
>>> primitive ) value ( value1 0 0 0 )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off __PRIMNUM
>>> opexprlanguage -s hscript __PRIMNUM
>>>
>>> # Node foreach2 (Sop/foreach)
>>> opadd -n foreach foreach2
>>> oplocate -x 3.50951 -y -2.29415 foreach2
>>> opparm foreach2 fortype ( number ) numrange ( 0 4 1 ) mergeresults ( 
>>> off )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off foreach2
>>> opexprlanguage -s hscript foreach2
>>> opcf foreach2
>>>
>>> # Node each1 (Sop/each)
>>> opadd -n each each1
>>> oplocate -x 0.6102 -y 4.8513 each1
>>> chblockbegin
>>> chadd -t 0 0 each1 attribtol
>>> chkey -t 0 -v 0.001 -m 0 -a 0 -A 0 -T a -F 'ch("../attribtol")'
>>> each1/attribtol
>>> chadd -t 0 0 each1 attribval1
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>> chs("../forstamp") + "1", 0)' each1/attribval1
>>> chadd -t 0 0 each1 attribval2
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>> chs("../forstamp") + "2", 0)' each1/attribval2
>>> chadd -t 0 0 each1 attribval3
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F 'stamp("..",
>>> chs("../forstamp") + "3", 0)' each1/attribval3
>>> chadd -t 0 0 each1 attrib
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F
>>> 'ifs(!!strcmp(chs("../fortype"), "attrib"), "", chs("../attrib"))'
>>> each1/attrib
>>> chadd -t 0 0 each1 group
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F
>>> 'ifs(!!strcmp(chs("../fortype"), "group"), "", stamps("..",
>>> chs("../forstamp"), ""))' each1/group
>>> chadd -t 0 0 each1 feedback
>>> chkey -t 0 -v 0 -m 0 -a 0 -A 0 -T a -F '!ch("../mergeresults")'
>>> each1/feedback
>>> chblockend
>>> opparm each1 feedback ( feedback ) group ( group ) attrib ( attrib )
>>> attribval ( attribval1 attribval2 attribval3 ) attribtol ( attribtol )
>>> forpath ( .. )
>>> opset -d off -r off -h off -f off -y off -t off -l off -s off -u off
>>> -c off -e on -b off each1
>>> opexprlanguage -s hscript each1
>>>
>>> # Node divide2 (Sop/divide)
>>> opadd -n divide divide2
>>> oplocate -x 0.6102 -y 3.42343 divide2
>>> opparm divide2 convex ( off ) dual ( on )
>>> opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c
>>> off -e on -b off divide2
>>> opexprlanguage -s hscript divide2
>>> oporder -e each1 divide2
>>> opcf ..
>>> oporder -e circle1 triangulate2d1 facet1 foreach1 __PRIMNUM foreach2
>>> opcf ..
>>>
>>> opcf /obj
>>> opcf circle_cells
>>> opwire -n circle1 -0 triangulate2d1
>>> opwire -n foreach2 -0 facet1
>>> opwire -n __PRIMNUM -0 foreach1
>>> opcf foreach1
>>> opwire -n -i 0 -0 each1
>>> opwire -n each1 -0 delete2
>>> opwire -n delete1 -0 fit1
>>> opwire -n delete2 -0 resample1
>>> opwire -n resample1 -0 delete1
>>> opcf ..
>>> opwire -n facet1 -0 __PRIMNUM
>>> opwire -n triangulate2d1 -0 foreach2
>>> opcf foreach2
>>> opwire -n -i 0 -0 each1
>>> opwire -n each1 -0 divide2
>>> opcf ..
>>> opcf ..
>>> opcf $saved_path
>>>
>>> ######################################################
>>>
>>> 2009/8/5 Doug Struthers <dragonfly at dougstruthers.com>:
>>> > Thanks for your inputs.
>>> >
>>> > Since there do not need to be thousands of them I bet I can iterate on
>>> them
>>> > to get a close approximation without taking a long long time to 
>>> > compute.
>>> >
>>> > It is intriguing to think that there may be a function with dops that 
>>> > the
>>> > solution falls out of but I am still a way down the learning curve 
>>> > with
>>> all
>>> > the functionality that exists in vops let alone rolling my own.
>>> >
>>> > Cheers
>>> >
>>> > Doug
>>> >
>>> > On Wed, Aug 5, 2009 at 9:09 AM, Gene Dreitser <keyframe at rogers.com>
>>> wrote:
>>> >
>>> >>
>>> >> Might also be worth it to take a look at the output of the isooffset 
>>> >> sop
>>> >> using the 'tetra-mesh' output type. Tetra-type set to 'cubes'.
>>> >>
>>> >> While it will not pack perfectly, it DOES create a predictable 
>>> >> pattern
>>> of
>>> >> rows and columns that one might be able to make use, and as an added
>>> bonus,
>>> >> it can use ray-intersect to sample the original mesh.
>>> >>
>>> >> Best,
>>> >>
>>> >> G
>>> >>
>>> >> --
>>> >> Gene Dreitser
>>> >> Loki Visual Effects
>>> >> p: 416.532.5654 // c: 416.803.0682 // www.lokivfx.com
>>> >>
>>> >>
>>> >>
>>> >> ----- Original Message ----
>>> >> From: Andy Nicholas <andy at andynicholas.com>
>>> >> To: sidefx-houdini-list at sidefx.com
>>> >> Sent: Wednesday, August 5, 2009 12:05:13 PM
>>> >> Subject: Re: [Sidefx-houdini-list] Space filling circles
>>> >>
>>> >> Hi Doug,
>>> >> Are you asking this because you know of this being done somewhere 
>>> >> else?
>>> I
>>> >> only ask because I just Googled this (out of my own interest), and
>>> judging
>>> >> on how many papers are written on this topic, I'd say that it's a
>>> >> non-trivial problem to solve.
>>> >>
>>> >> The only thing that springs to mind, would be to create an iterative
>>> >> approach, using the SOP solver or the Feedback SOP (proto_install).
>>> >>
>>> >> Note that I haven't tested this, or fully thought it through, but the
>>> >> following... might... just... work...
>>> >>
>>> >> Start off with a triangular polygon with a random sized disc at each
>>> >> vertex so that their circumferences touch. From that, take a pair of
>>> discs
>>> >> and create another randomly sized one and place it (using simple
>>> >> trigonometry) so that it touches the first two. Extend the triangle 
>>> >> into
>>> a
>>> >> four sided polygon with the new point at the center of the new disc.
>>> >> Repeat the process, but ignoring any discs internal to the polygon.
>>> >>
>>> >> I can see this approach breaking down if you ever have a non-convex
>>> >> polygon, but there are probably some constraints that you could 
>>> >> figure
>>> out
>>> >> that will prevent this from happening.
>>> >>
>>> >> Andy
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> > Hi
>>> >> >
>>> >> > Can anyone point me to a Houdini method (or other solution) for
>>> packing
>>> >> > random sized circles so that they are tightly packed and each
>>> >> > circumference
>>> >> > just touches its neighbors?
>>> >> >
>>> >> > Thanks
>>> >> >
>>> >> > Doug
>>> >> >
>>> >> > --
>>> >> > www.dougstruthers.com
>>> >> > _______________________________________________
>>> >> > Sidefx-houdini-list mailing list
>>> >> > Sidefx-houdini-list at sidefx.com
>>> >> > https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>> >> >
>>> >>
>>> >>
>>> >> _______________________________________________
>>> >> Sidefx-houdini-list mailing list
>>> >> Sidefx-houdini-list at sidefx.com
>>> >> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>> >>
>>> >> _______________________________________________
>>> >> Sidefx-houdini-list mailing list
>>> >> Sidefx-houdini-list at sidefx.com
>>> >> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > www.dougstruthers.com
>>> > _______________________________________________
>>> > Sidefx-houdini-list mailing list
>>> > Sidefx-houdini-list at sidefx.com
>>> > https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>> >
>>>
>>>
>>>
>>> --
>>> =======================================
>>> Andrew D Lyons | Digital Artist | http://www.tstex.com
>>> =======================================
>>> _______________________________________________
>>> Sidefx-houdini-list mailing list
>>> Sidefx-houdini-list at sidefx.com
>>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>> _______________________________________________
>>> Sidefx-houdini-list mailing list
>>> Sidefx-houdini-list at sidefx.com
>>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>>
>> _______________________________________________
>> Sidefx-houdini-list mailing list
>> Sidefx-houdini-list at sidefx.com
>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>
>
>
>
> --
> =======================================
> Andrew D Lyons | Digital Artist | http://www.tstex.com
> =======================================
>



-- 
=======================================
Andrew D Lyons | Digital Artist | http://www.tstex.com
=======================================
_______________________________________________
Sidefx-houdini-list mailing list
Sidefx-houdini-list at sidefx.com
https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list






More information about the Sidefx-houdini-list mailing list