Permalink
Browse files

Use vector math in cyclone.

  • Loading branch information...
savask committed Apr 23, 2018
1 parent cda029f commit 7afd82469e083ce09102c1974c1c88861734cf19
Showing with 10 additions and 6 deletions.
  1. +10 −6 src/simulation/simtools/Cyclone.cpp
@@ -16,19 +16,23 @@ int Tool_Cycl::Perform(Simulation * sim, Particle * cpart, int x, int y, int bru
{
/*
Air velocity calculation.
Air velocity X = cosine of cell angle
Angle of cell is calculated via cells X/Y relation to the brush center and arctangent
Angle has 1.57 radians added to it (90 degrees) in order to make the velocity be at 90 degrees to the centerpoint.
Ditto for Y, except Y uses sine
(x, y) -- turn 90 deg -> (-y, x)
*/
// only trigger once per cell (less laggy)
if ((x%CELL) == 0 && (y%CELL) == 0)
{
if(brushX == x && brushY == y)
return 1;
float *vx = &sim->air->vx[y / CELL][x / CELL];
float *vy = &sim->air->vy[y / CELL][x / CELL];
*vx -= (strength / 16) * (tpt::cos(1.57f + (tpt::atan2(brushY - y, brushX - x))));
*vy -= (strength / 16) * (tpt::sin(1.57f + (tpt::atan2(brushY - y, brushX - x))));
float dvx = brushX - x;
float dvy = brushY - y;
float invsqr = 1/sqrtf(dvx*dvx + dvy*dvy);
*vx -= (strength / 16) * (-dvy)*invsqr;
*vy -= (strength / 16) * dvx*invsqr;
// Clamp velocities
if (*vx > 256.0f)

0 comments on commit 7afd824

Please sign in to comment.