/* Please note that Much of this code was adapted from Ben Fry's * Treemap example in chapter 7 of his book: * Visualizing Data, First Edition by Ben Fry. Copyright 2008 Ben Fry * ISBN: 9780596514556 */ /* ** ======================================================== ** MAT259 Visualizaing Data | Winter 2011 | George Legrady ** ======================================================= ** Project 2 : Top 100 Most Checked Out Items from 2005 to 2010 ** ============================================================== ** Nichole Stockman ** ================ ** ** ** ===================================================================== ** For information on how the data was parsed, how the application works ** and some key notes and observations, please see the README file.` ** Thank you! ** ===================================================================== */ public class BoundsIntegrator { static final float ATTRACTION = 0.2f; static final float DAMPING = 0.5f; float valueX, velocityX, accelerationX; float valueY, velocityY, accelerationY; float valueW, velocityW, accelerationW; float valueH, velocityH, accelerationH; float damping; float attraction; boolean targeting; float targetX, targetY, targetW, targetH; public BoundsIntegrator() { this.valueX = 0; this.valueY = 0; this.valueW = 1; this.valueH = 1; this.damping = DAMPING; this.attraction = ATTRACTION; } public BoundsIntegrator(float x, float y, float w, float h) { this.valueX = x; this.valueY = y; this.valueW = w; this.valueH = h; this.damping = DAMPING; this.attraction = ATTRACTION; } public void set(float x, float y, float w, float h) { this.valueX = x; this.valueY = y; this.valueW = w; this.valueH = h; } public float getX() { return valueX; } public float getY() { return valueY; } public float getW() { return valueW; } public float getH() { return valueH; } public float spanX(float pointX, float start, float span) { if (valueW != 0) { //return (pointX - valueX) / valueW; float n = (pointX - valueX) / valueW; return start + n*span; } else { return Float.NaN; } } public float spanY(float pointY, float start, float span) { if (valueH != 0) { //return (pointY - valueY) / valueH; float n = (pointY - valueY) / valueH; return start + n*span; } else { return Float.NaN; } } public void setAttraction(float a) { attraction = a; } public void setDamping(float d) { damping = d; } public boolean update() { if (targeting) { accelerationX += attraction * (targetX - valueX); velocityX = (velocityX + accelerationX) * damping; valueX += velocityX; accelerationX = 0; boolean updated = (Math.abs(velocityX) > 0.0001f); accelerationY += attraction * (targetY - valueY); velocityY = (velocityY + accelerationY) * damping; valueY += velocityY; accelerationY = 0; updated |= (Math.abs(velocityY) > 0.0001f); accelerationW += attraction * (targetW - valueW); velocityW = (velocityW + accelerationW) * damping; valueW += velocityW; accelerationW = 0; updated |= (Math.abs(velocityW) > 0.0001f); accelerationH += attraction * (targetH - valueH); velocityH = (velocityH + accelerationH) * damping; valueH += velocityH; accelerationH = 0; updated |= (Math.abs(velocityH) > 0.0001f); } return false; } public void target(float tx, float ty, float tw, float th) { targeting = true; targetX = tx; targetY = ty; targetW = tw; targetH = th; } public void targetLocation(float tx, float ty) { targeting = true; targetX = tx; targetY = ty; } public void targetSize(float tw, float th) { targeting = true; targetW = tw; targetH = th; } public void targetX(float tx) { targeting = true; targetX = tx; } public void targetY(float ty) { targeting = true; targetY = ty; } public void targetW(float tw) { targeting = true; targetW = tw; } public void targetH(float th) { targeting = true; targetH = th; } }