diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-04-18 14:10:09 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-04-18 14:10:09 (GMT) |
| commit | d03a9c8fe552a46bcc1eec8f0e717d135f66d809 (patch) | |
| tree | 4fdf2af6a3db1adc884378b5b0f791cd31e77ded /src/simulation/Simulation.cpp | |
| parent | ce7d749dda46fb068fa0496bfcb6aba6387f30d5 (diff) | |
| download | powder-d03a9c8fe552a46bcc1eec8f0e717d135f66d809.zip powder-d03a9c8fe552a46bcc1eec8f0e717d135f66d809.tar.gz | |
TPT: Rotate/reflect particle, air, and fan velocities in transform_save 830629be3f
Diffstat (limited to 'src/simulation/Simulation.cpp')
| -rw-r--r-- | src/simulation/Simulation.cpp | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 6341f86..0c8797e 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -734,18 +734,25 @@ void *Simulation::transform_save(void *odata, int *size, matrix2d transform, vec void *ndata; unsigned char (*bmapo)[XRES/CELL] = (unsigned char (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(unsigned char)); unsigned char (*bmapn)[XRES/CELL] = (unsigned char (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(unsigned char)); - Particle *partst = (Particle *)calloc(sizeof(Particle), NPART); - sign *signst = (sign *)calloc(MAXSIGNS, sizeof(sign)); + Particle *partst = (Particle*)calloc(sizeof(Particle), NPART); + sign *signst = (sign*)calloc(MAXSIGNS, sizeof(sign)); unsigned (*pmapt)[XRES] = (unsigned (*)[XRES])calloc(YRES*XRES, sizeof(unsigned)); float (*fvxo)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); float (*fvyo)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); float (*fvxn)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); float (*fvyn)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); + float (*vxo)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); + float (*vyo)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); + float (*vxn)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); + float (*vyn)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); + float (*pvo)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); + float (*pvn)[XRES/CELL] = (float (*)[XRES/CELL])calloc((YRES/CELL)*(XRES/CELL), sizeof(float)); int i, x, y, nx, ny, w, h, nw, nh; vector2d pos, tmp, ctl, cbr; + vector2d vel; vector2d cornerso[4]; unsigned char *odatac = (unsigned char *)odata; - //*if (parse_save(odata, *size, 0, 0, 0, bmapo, fvxo, fvyo, signst, partst, pmapt)) TODO: IMPLEMENT + //if (parse_save(odata, *size, 0, 0, 0, bmapo, vxo, vyo, pvo, fvxo, fvyo, signst, partst, pmapt)) //TODO: Implement { free(bmapo); free(bmapn); @@ -756,6 +763,12 @@ void *Simulation::transform_save(void *odata, int *size, matrix2d transform, vec free(fvyo); free(fvxn); free(fvyn); + free(vxo); + free(vyo); + free(vxn); + free(vyn); + free(pvo); + free(pvn); return odata; } w = odatac[6]*CELL; @@ -811,6 +824,10 @@ void *Simulation::transform_save(void *odata, int *size, matrix2d transform, vec } partst[i].x = nx; partst[i].y = ny; + vel = v2d_new(partst[i].vx, partst[i].vy); + vel = m2d_multiply_v2d(transform, vel); + partst[i].vx = vel.x; + partst[i].vy = vel.y; } for (y=0; y<YRES/CELL; y++) for (x=0; x<XRES/CELL; x++) @@ -826,12 +843,19 @@ void *Simulation::transform_save(void *odata, int *size, matrix2d transform, vec bmapn[ny][nx] = bmapo[y][x]; if (bmapo[y][x]==WL_FAN) { - fvxn[ny][nx] = fvxo[y][x]; - fvyn[ny][nx] = fvyo[y][x]; + vel = v2d_new(fvxo[y][x], fvyo[y][x]); + vel = m2d_multiply_v2d(transform, vel); + fvxn[ny][nx] = vel.x; + fvyn[ny][nx] = vel.y; } } + vel = v2d_new(vxo[y][x], vyo[y][x]); + vel = m2d_multiply_v2d(transform, vel); + vxn[ny][nx] = vel.x; + vyn[ny][nx] = vel.y; + pvn[ny][nx] = pvo[y][x]; } - //ndata = build_save(size,0,0,nw,nh,bmapn,fvxn,fvyn,signst,partst); TODO: IMPLEMENT + //ndata = build_save(size,0,0,nw,nh,bmapn,vxn,vyn,pvn,fvxn,fvyn,signst,partst); //TODO: IMPLEMENT free(bmapo); free(bmapn); free(partst); @@ -841,6 +865,12 @@ void *Simulation::transform_save(void *odata, int *size, matrix2d transform, vec free(fvyo); free(fvxn); free(fvyn); + free(vxo); + free(vyo); + free(vxn); + free(vyn); + free(pvo); + free(pvn); return ndata; } |
