Flint Particle System Forum - BoundingBox question 2012-05-26T06:25:52+01:00 http://flintparticles.org/forum/ Lussumo Vanilla & Feed Publisher BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=451#Comment_451 2008-10-28T11:42:09+00:00 2008-10-30T15:10:36+00:00 mp http://flintparticles.org/forum/account.php?u=83 Hi! i search about it, but i'll put the question...it's possible have a boundingBox circular, or construct it based on polygon? thanks. mp
i search about it, but i'll put the question...it's possible have a boundingBox circular, or construct it based on polygon?

thanks.
mp]]>
BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=456#Comment_456 2008-10-30T15:09:33+00:00 2012-05-26T06:25:52+01:00 Richard http://flintparticles.org/forum/account.php?u=1 Not at the moment but I hope to have this in a later version. BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=523#Comment_523 2008-11-18T13:45:56+00:00 2012-05-26T06:25:52+01:00 iworkinprogress http://flintparticles.org/forum/account.php?u=102 Seconded. This feature would be really useful. BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=525#Comment_525 2008-11-18T14:13:44+00:00 2012-05-26T06:25:52+01:00 psilos http://flintparticles.org/forum/account.php?u=97 +1 BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=627#Comment_627 2009-01-15T17:36:56+00:00 2012-05-26T06:25:52+01:00 tlp http://flintparticles.org/forum/account.php?u=8 or something like a BoundingZone! I tried to implement it for 3DZones, but sadly i failed, at least so far! ;) Would be so nice to see something like that in next Version soon! ;) regards Timo I tried to implement it for 3DZones, but sadly i failed, at least so far! ;)
Would be so nice to see something like that in next Version soon! ;)

regards

Timo]]>
BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=630#Comment_630 2009-01-18T10:14:37+00:00 2012-05-26T06:25:52+01:00 Richard http://flintparticles.org/forum/account.php?u=1 It will, indeed, be various physics related to Zones. There's a branch in SVN called LinesAndCollisions where I've started developing it. BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=632#Comment_632 2009-01-18T13:49:26+00:00 2012-05-26T06:25:52+01:00 tlp http://flintparticles.org/forum/account.php?u=8 how nice! looking forward to that! I will try to check out the branch! Thanks so much! I will try to check out the branch!
Thanks so much!]]>
BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=1768#Comment_1768 2011-11-03T21:34:42+00:00 2012-05-26T06:25:52+01:00 Piwie http://flintparticles.org/forum/account.php?u=563 Hello! Is there a way to create a boundingSphere, or others 3d bounding shapes? any workaround? Iv'e looked into the boundingBox class, but i don't see how to achieve this... Thanks a lot!
Is there a way to create a boundingSphere, or others 3d bounding shapes? any workaround?
Iv'e looked into the boundingBox class, but i don't see how to achieve this...

Thanks a lot!]]>
BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=1774#Comment_1774 2011-11-05T11:24:02+00:00 2012-05-26T06:25:52+01:00 Richard http://flintparticles.org/forum/account.php?u=1 Hi For a general solution, you need a 3d equivalent of the 2d CollisionZone action. But you could also create a specific custom action just for the shape you need.
For a general solution, you need a 3d equivalent of the 2d CollisionZone action. But you could also create a specific custom action just for the shape you need.]]>
BoundingBox question http://flintparticles.org/forum/comments.php?DiscussionID=108&Focus=1776#Comment_1776 2011-11-05T16:00:36+00:00 2012-05-26T06:25:52+01:00 Piwie http://flintparticles.org/forum/account.php?u=563 Hey Richard, Thank you for your suggestions. I guess create a 3d CollisionZone might be the best solution. So, in the SphereZone class, i've added a new method in SphereZone , collideParticle, ... Thank you for your suggestions. I guess create a 3d CollisionZone might be the best solution.
So, in the SphereZone class, i've added a new method in SphereZone , collideParticle, it's code is a copy/paste from 2d DiscZone in which i've add the z dimensions. But, of course, it's not working as i hoped : some particles are bouncing fine, some are juste going outside of my spherezone, and others are bouncing from 10 to 20 pixels. I will be very gratefull if you can take a look at this code!

Thanks so much
<code>
public function collideParticle(particle:Particle3D, bounce:Number = 1):Boolean
{
var outerLimit:Number;
var innerLimit:Number;
var outerLimitSq:Number;
var innerLimitSq:Number;
var distanceSq:Number;
var distance:Number;
var pdx:Number;
var pdy:Number;
var pdz:Number;
var pDistanceSq:Number;
var adjustSpeed:Number;
var positionRatio:Number;
var epsilon:Number = 0.001;
var dx:Number = particle.position.x - _center.x;
var dy:Number = particle.position.y - _center.y;
var dz:Number = particle.position.z - _center.z;
var dotProduct:Number = particle.velocity.x * dx + particle.velocity.y * dy + particle.velocity.z * dz;
if( dotProduct < 0 ) // moving towards center
{
outerLimit = _outerRadius + particle.collisionRadius;
if( Math.abs( dx ) > outerLimit ) return false;
if( Math.abs( dy ) > outerLimit ) return false;
if( Math.abs( dz ) > outerLimit ) return false;
distanceSq = dx * dx + dy * dy + dz * dz;
outerLimitSq = outerLimit * outerLimit;
if( distanceSq > outerLimitSq ) return false;
// Particle is inside outer circle

pdx = (particle.position.x - particle.velocity.x) - _center.x;
pdy = (particle.position.y - particle.velocity.y) - _center.y;
pdz = (particle.position.z - particle.velocity.z) - _center.z;
pDistanceSq = pdx * pdx + pdy * pdy + pdz * pdz;
if( pDistanceSq > outerLimitSq )
{
// particle was outside outer circle
adjustSpeed = ( 1 + bounce ) * dotProduct / distanceSq;
particle.velocity.x -= adjustSpeed * dx;
particle.velocity.y -= adjustSpeed * dy;
particle.velocity.z -= adjustSpeed * dz;
distance = Math.sqrt( distanceSq );
positionRatio = ( 2 * outerLimit - distance ) / distance + epsilon;
particle.position.x = _center.x + dx * positionRatio;
particle.position.y = _center.y + dy * positionRatio;
particle.position.z = _center.z + dz * positionRatio;
return true;
}

if( _innerRadius != 0 && innerRadius != _outerRadius )
{
innerLimit = _innerRadius + particle.collisionRadius;
if( Math.abs( dx ) > innerLimit ) return false;
if( Math.abs( dy ) > innerLimit ) return false;
if( Math.abs( dz ) > innerLimit ) return false;
innerLimitSq = innerLimit * innerLimit;
if( distanceSq > innerLimitSq ) return false;
// Particle is inside inner circle

if( pDistanceSq > innerLimitSq )
{
// particle was outside inner circle
adjustSpeed = ( 1 + bounce ) * dotProduct / distanceSq;
particle.velocity.x -= adjustSpeed * dx;
particle.velocity.y -= adjustSpeed * dy;
particle.velocity.z -= adjustSpeed * dz;
distance = Math.sqrt( distanceSq );
positionRatio = ( 2 * innerLimit - distance ) / distance + epsilon;
particle.position.x = _center.x + dx * positionRatio;
particle.position.y = _center.y + dy * positionRatio;
particle.position.z = _center.z + dz * positionRatio;
return true;
}
}
return false;
}
else // moving away from center
{
outerLimit = _outerRadius - particle.collisionRadius;
//pdx = particle.previousX - _center.x;
pdx = (particle.position.x - particle.velocity.x) - _center.x;
pdy = (particle.position.y - particle.velocity.y) - _center.y;
pdy = (particle.position.z - particle.velocity.z) - _center.z;
if( Math.abs( pdx ) > outerLimit ) return false;
if( Math.abs( pdy ) > outerLimit ) return false;
if( Math.abs( pdz ) > outerLimit ) return false;
pDistanceSq = pdx * pdx + pdy * pdy + pdz * pdz;
outerLimitSq = outerLimit * outerLimit;
if( pDistanceSq > outerLimitSq ) return false;
// particle was inside outer circle

distanceSq = dx * dx + dy * dy + dz * dz;

if( _innerRadius != 0 && innerRadius != _outerRadius )
{
innerLimit = _innerRadius - particle.collisionRadius;
innerLimitSq = innerLimit * innerLimit;
if( pDistanceSq < innerLimitSq && distanceSq >= innerLimitSq )
{
// particle was inside inner circle and is outside it
adjustSpeed = ( 1 + bounce ) * dotProduct / distanceSq;
particle.velocity.x -= adjustSpeed * dx;
particle.velocity.y -= adjustSpeed * dy;
particle.velocity.z -= adjustSpeed * dz;
distance = Math.sqrt( distanceSq );
positionRatio = ( 2 * innerLimit - distance ) / distance - epsilon;
particle.position.x = _center.x + dx * positionRatio;
particle.position.y = _center.y + dy * positionRatio;
particle.position.z = _center.z + dz * positionRatio;
return true;
}
}

if( distanceSq >= outerLimitSq )
{
// Particle is inside outer circle
adjustSpeed = ( 1 + bounce ) * dotProduct / distanceSq;
particle.velocity.x -= adjustSpeed * dx;
particle.velocity.y -= adjustSpeed * dy;
particle.velocity.z -= adjustSpeed * dz;
distance = Math.sqrt( distanceSq );
positionRatio = ( 2 * outerLimit - distance ) / distance - epsilon;
particle.position.x = _center.x + dx * positionRatio;
particle.position.y = _center.y + dy * positionRatio;
particle.position.z = _center.z + dz * positionRatio;
return true;
}
return false;
}
}
</code>]]>