|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Hello,
i want to make spheres in a sphere. I know there is a function for that :
VRand_In_Obj.
But i want to prevent the intersection of spheres between them.
How can i do proceed to do that ?
Thanks for your help
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Le 16/03/2014 12:45, nonostar nous fit lire :
> Hello,
>
> i want to make spheres in a sphere. I know there is a function for that :
> VRand_In_Obj.
>
> But i want to prevent the intersection of spheres between them.
>
> How can i do proceed to do that ?
>
> Thanks for your help
>
>
You want to find a solution to apolonian gasket in 3D.
> http://en.wikipedia.org/wiki/Apollonian_gasket
A recursing macro might be a solution to generate smaller and smaller
spheres.
Sadly the pages of Mr Bourke are no more online.
> http://en.wikipedia.org/wiki/Apollonian_sphere_packing
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Le_Forgeron <jgr### [at] freefr> wrote:
> Le 16/03/2014 12:45, nonostar nous fit lire :
> > Hello,
> >
> > i want to make spheres in a sphere. I know there is a function for that :
> > VRand_In_Obj.
> >
> > But i want to prevent the intersection of spheres between them.
> >
> > How can i do proceed to do that ?
> >
> > Thanks for your help
> >
> >
>
> You want to find a solution to apolonian gasket in 3D.
>
> > http://en.wikipedia.org/wiki/Apollonian_gasket
>
> A recursing macro might be a solution to generate smaller and smaller
> spheres.
>
> Sadly the pages of Mr Bourke are no more online.
>
> > http://en.wikipedia.org/wiki/Apollonian_sphere_packing
It's less complicated.
In fact i just want to make spheres with a same radius like this :
http://news.povray.org/povray.binaries.images/message/%3Cweb.4d9d10aec2af4450b86cffc90%40news.povray.org%3E/#%3Cweb.4d9
d10aec2af4450b86cffc90%40news.povray.org%3E
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"nonostar" <nomail@nomail> wrote:
> It's less complicated.
> In fact i just want to make spheres with a same radius like this :
>
http://news.povray.org/povray.binaries.images/message/%3Cweb.4d9d10aec2af4450b86cffc90%40news.povray.org%3E/#%3Cweb.4
d9
> d10aec2af4450b86cffc90%40news.povray.org%3E
Does it matter if the spheres are tightly packed or not?
That image you linked to required testing for intersecting spheres, which can
take quite a while depending on the number of spheres being tested. For that
image I used a program created with voro++, which sped up intersection tests by
finding the spheres' nearest neighbors (so that each sphere didn't have to be
tested against every_other_sphere).
There's another method I just stumbled upon which is even faster, but the
spheres are by no means tightly packed.
Why do you want a sphere full of spheres? What will you be rendering? For things
like filled gumball machines, the methods I mentioned aren't very useful. For
something like a gumball machine, I'd recommend using Blender's physics sim
along with a script I wrote that exports to a POV-Ray array the positions,
sizes, and rotations of all objects in a group. That way you can combine
Blender's physics with POV's perfect geometry (and using less RAM than meshes).
Tell me what you'll be doing, and I'll try to help you out.
Sam
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Le_Forgeron <jgr### [at] freefr> wrote:
> Le 16/03/2014 12:45, nonostar nous fit lire :
> > Hello,
> >
> > i want to make spheres in a sphere. I know there is a function for that :
> > VRand_In_Obj.
> >
> > But i want to prevent the intersection of spheres between them.
> >
> > How can i do proceed to do that ?
> >
> > Thanks for your help
> >
> >
>
> You want to find a solution to apolonian gasket in 3D.
>
> > http://en.wikipedia.org/wiki/Apollonian_gasket
>
> A recursing macro might be a solution to generate smaller and smaller
> spheres.
>
> Sadly the pages of Mr Bourke are no more online.
>
> > http://en.wikipedia.org/wiki/Apollonian_sphere_packing
i was just at his site http://paulbourke.net/ because i used his starfield.
his links have not been updated; 'miscellaneous; projection, modeling,
rendering' should be
http://paulbourke.net/miscellaneous/
'interlinked square tori' (jan 2014) works, pretty cool.
green
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Le_Forgeron <jgr### [at] freefr> wrote:
> Le 16/03/2014 12:45, nonostar nous fit lire :
> > Hello,
> >
> > i want to make spheres in a sphere. I know there is a function for that :
> > VRand_In_Obj.
> >
> > But i want to prevent the intersection of spheres between them.
> >
> > How can i do proceed to do that ?
> >
> > Thanks for your help
> >
> >
>
> You want to find a solution to apolonian gasket in 3D.
>
> > http://en.wikipedia.org/wiki/Apollonian_gasket
>
> A recursing macro might be a solution to generate smaller and smaller
> spheres.
>
> Sadly the pages of Mr Bourke are no more online.
>
> > http://en.wikipedia.org/wiki/Apollonian_sphere_packing
Thks but it's less complicated i think.
I just want spheres with the same radius like this :
http://news.povray.org/povray.binaries.images/message/%3Cweb.4d9d10aec2af4450b86cffc90%40news.povray.org%3E/#%3Cweb.4d9
d10aec2af4450b86cffc90%40news.povray.org%3E
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
> Hello,
>
> i want to make spheres in a sphere. I know there is a function for that :
> VRand_In_Obj.
>
> But i want to prevent the intersection of spheres between them.
>
> How can i do proceed to do that ?
>
> Thanks for your help
>
>
A common and simple solution for equaly sized spheres:
Create an array large enough to contain the locations of all your spheres.
Randomly place about 10 to 100 spheres. Make sure that the new spheres
are located at twice the individual radius. Each acceptable location is
placed in the array.
Make an union of test spheres, each having twice the radius of your
intended spheres.
Now, for the next spheres, start with an insideness test against that
union. There is an is_inside function that return 0 if outside an object
and 1 if inside.
Continue for another batch of spheres that will also be used to create
another union.
Repeat untill you have all yours spheres, or you need to many tries to
find a suitable location.
Finaly, using the locations from your array, place the actual spheres.
Using a bunch of unions of double sized spheres is much faster than
testing for every previous spheres.
This don't ensure the most optimum packing, but ensure that all spheres
are non-intersecting.
If you search in povray.binaries.scene-files, you can find some working
code made exactly for that purpose.
Alain
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Alain <kua### [at] videotronca> wrote:
> > Hello,
> >
> > i want to make spheres in a sphere. I know there is a function for that :
> > VRand_In_Obj.
> >
> > But i want to prevent the intersection of spheres between them.
> >
> > How can i do proceed to do that ?
> >
> > Thanks for your help
> >
> >
>
> A common and simple solution for equaly sized spheres:
> Create an array large enough to contain the locations of all your spheres.
> Randomly place about 10 to 100 spheres. Make sure that the new spheres
> are located at twice the individual radius. Each acceptable location is
> placed in the array.
> Make an union of test spheres, each having twice the radius of your
> intended spheres.
> Now, for the next spheres, start with an insideness test against that
> union. There is an is_inside function that return 0 if outside an object
> and 1 if inside.
> Continue for another batch of spheres that will also be used to create
> another union.
> Repeat untill you have all yours spheres, or you need to many tries to
> find a suitable location.
>
> Finaly, using the locations from your array, place the actual spheres.
>
> Using a bunch of unions of double sized spheres is much faster than
> testing for every previous spheres.
>
> This don't ensure the most optimum packing, but ensure that all spheres
> are non-intersecting.
>
> If you search in povray.binaries.scene-files, you can find some working
> code made exactly for that purpose.
>
>
> Alain
Thanks for these answers.
I will try to do it step by step with time because i am a new user on this
software.
i inform you.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"nonostar" <nomail@nomail> wrote:
> Alain <kua### [at] videotronca> wrote:
> > > Hello,
> > >
> > > i want to make spheres in a sphere. I know there is a function for that :
> > > VRand_In_Obj.
> > >
> > > But i want to prevent the intersection of spheres between them.
> > >
> > > How can i do proceed to do that ?
> > >
> > > Thanks for your help
> > >
> > >
> >
> > A common and simple solution for equaly sized spheres:
> > Create an array large enough to contain the locations of all your spheres.
> > Randomly place about 10 to 100 spheres. Make sure that the new spheres
> > are located at twice the individual radius. Each acceptable location is
> > placed in the array.
> > Make an union of test spheres, each having twice the radius of your
> > intended spheres.
> > Now, for the next spheres, start with an insideness test against that
> > union. There is an is_inside function that return 0 if outside an object
> > and 1 if inside.
> > Continue for another batch of spheres that will also be used to create
> > another union.
> > Repeat untill you have all yours spheres, or you need to many tries to
> > find a suitable location.
> >
> > Finaly, using the locations from your array, place the actual spheres.
> >
> > Using a bunch of unions of double sized spheres is much faster than
> > testing for every previous spheres.
> >
> > This don't ensure the most optimum packing, but ensure that all spheres
> > are non-intersecting.
> >
> > If you search in povray.binaries.scene-files, you can find some working
> > code made exactly for that purpose.
> >
> >
> > Alain
>
> Thanks for these answers.
> I will try to do it step by step with time because i am a new user on this
> software.
> i inform you.
Hello
This is that i did. But some sphere are again to gether.
Where is the problem?
I use the function : inside.
#include "rand.inc"
#declare Random_1 = seed (12433);
#declare Tableau=array[3000]
#declare Tableau2=array[3000]
#declare Variable=0;
#while (Variable<3000)
#declare Tableau[Variable]= VRand_In_Sphere(Random_1);
#declare Variable=Variable+1;
#end
#declare VariableX=0;
#declare Variable=1;
#declare S1=Tableau[0];
#declare B1=sphere{S1 0.05 pigment {rgb <1,1,0>}}
#declare Point=Tableau[1] ;
#while (Variable<3000)
#while (VariableX<=Variable)
#if (inside(B1, Point))
#declare Tableau2[Variable]=0 ;
#declare VariableX=VariableX+1;
#declare S1=Tableau[VariableX];
#else
#declare Tableau2[Variable]=0.05;
#end
#declare VariableX=VariableX+1;
#end
#declare Variable=Variable+1;
#end
//---------------------------------------------------------
#declare Variable=1;
#declare Variable2=1;
#while (Variable<3000)
#declare S2=Tableau[Variable];
#declare S3=Tableau2[Variable];
sphere{S2 S3 pigment{rgb<1,1,0>}}
#declare Variable=Variable+1;
#declare Variable2=Variable2+1;
#end
Can you help me?
Thanks
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I tried to improve this.
But i get a problem.
When i ran i had this message : "Attempt to access unitialized array elemement"
for this line :
#declare Point=ArrayPosition[Variable2];
i give you my code.
#include "rand.inc"
#declare Random_1 = seed (12433);
#declare ArrayPosition=array[3000]
#declare ArrayRayon=array[3000]
#declare Variable=0;
#while (Variable<30)
#declare ArrayPosition[Variable]=VRand_In_Sphere(Random_1);
#declare ArrayRayon[Variable]=0.05;
#declare Variable=Variable+1;
#end
#declare Variable1=0;
#declare Variable2=1;
#declare Object=sphere{ArrayPosition[Variable1] ArrayRayon[Variable1] pigment
{rgb <1,1,0>}};
#declare Point=ArrayPosition[Variable2];
#while (Variable2<3000)
#while (Variable1<Variable2)
#if(inside(Object,Point))
#declare ArrayRayon[Variable2]=0;
#declare Variable1=Variable2;
#else
#declare Variable1=Variable1+1;
#declare Object=sphere{ArrayPosition[Variable1]
ArrayRayon[Variable1] pigment {rgb <1,1,0>}};
#end
#end
#declare Variable2=(Variable2+1);
#declare Variable1=0;
#declare Object=sphere{ArrayPosition[Variable1] ArrayRayon[Variable1]
pigment {rgb <1,1,0>}};
#declare Point=ArrayPosition[Variable2];
#end
#declare Variable=0;
#while (Variable<3000)
sphere{ArrayPosition[Variable] ArrayRayon[Variable] pigment {rgb <1,1,0>}}
#declare Variable=Variable+1;
#end
where is the mistake ?
I don't understand.
Thanks for your help
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |