PDA

View Full Version : increasing radiusPP relative to shape

 lowkey09-02-2003, 12:29 PMhello, can someone capable of efficiently writing expressions help me on the following?! look, i got this shape filled up with particles, the radius of which is randomly assigned by creation expression. now, i set the max. radiusPP to 1.2 to avoid particles from penetrating through the flow shape, but the overall distribution of size isn't completely satifying in it's current state. what i want to know is...how can i increase the radius of random particles in relation to their relative position towards the outer shape? :hmm: i mean, is there a method to query relative coordinates of bubbles and increase their radius based on this information? i don't know if i made myself clear...i need to resize a few - and only a few - of those bubbles, while still avoiding penetration, so the only objects in question will be those, that keep streaming right in the middle of the flow shape! any advice will be welcome! :wavey:
esse
09-02-2003, 01:02 PM
Hi Lowkey,

Do I understand it well if Iput it this way that you want to scale down (make radiusPP smaller) when a particle comes closer to the surface of the tube?

lowkey
09-02-2003, 01:04 PM
nope, i want a few particles to get bigger (scaled up) when further away from the surface! but only a few, randomly chosen...:eek:

esse
09-02-2003, 01:14 PM
ClosestPointOnSurface can tell you how far a particle is apart from a surface. You could use an expression that scales the radiusPP in case the particle is at least a given distance from the surface.

Randomising is just a matter of a couple of lines extra in the script.

lowkey
09-02-2003, 01:31 PM
well, i'm not too firm on writing expressions yet and i never used closestPointOnSurface before.

after creating the node, i connected the 'input surface' to the 'geometry attribute of the tube-shape. but how to go on from there? how can i query positional data and use it in an expression to get what i need? :shrug:

lowkey
09-02-2003, 03:10 PM
ok, i'm pondering over several solutions, but i need to know some basics first:

1. how to query the amount of particles of a particle.Shape node?

- i mean, there's that counter on the attribute editor, so i guess the information must be accessible via MEL!

2. how to query per particle positions, like to be seen in the component editor?!

anyone?! :wavey:

lowkey
09-02-2003, 03:21 PM
first one solved:

particle -q -ct objectShape;

:thumbsup:

lowkey
09-02-2003, 03:40 PM
i love answering my own questions:

particle -attribute position -id -q -vv objectShape;

returns the vector value as [float float float].

anyway, any recommendations or tips are still welcome! :)

minos365
09-04-2003, 04:44 PM
as you say ,i can calculate every particle position in world space,
but how can i calculate distance from particle to surface,when surface is no flat

esse
09-04-2003, 07:36 PM
Feed particle's position (the XYZ you obtained by: particle -attribute position -id -q -vv objectShape; into the closestPointOnsurface node and what comes out will be the XYZ position of the closest point on the surface.

Only thing left to do is calculate distance between the particle and the closestPointOnSurface.

lowkey
09-04-2003, 07:46 PM
yep, i guess you will have to set reference points across the whole surface/curve as a basis for the calculation.

then you'll probably have to evaluate every particles' relative position at any moment of time and offset it's radius!

:eek:

esse
09-04-2003, 08:48 PM
Btw, to compute the distance between 2 points in space you can use the following procedure.

global proc float computeDist(float \$point1[], float \$point2[])
{
float \$xDist = (\$point2[0]-\$point1[0]);
float \$yDist = (\$point2[1]-\$point1[1]);
float \$zDist = (\$point2[2]-\$point1[2]);
float \$dist = sqrt((\$xDist*\$xDist)+(\$yDist*\$yDist)+(\$zDist*\$zDist));
return \$dist;
}

assign the x y z values to the 2 arrays:

float \$point1[3];
\$point1[0]=0;
\$point1[1]=0;
\$point1[2]=0;

float \$point2[3];
\$point1[0]=1;
\$point1[1]=1;
\$point1[2]=1;

call the procedure like: computeDist(\$point1, \$point2);