/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/
package org.trifort.rootbeer.testcases.rootbeertest.ofcoarse;
import java.awt.geom.Point2D;
import java.awt.geom.Point2D.Double;
public class Droplet {
/* curr data */
private Point mCenter;
private double mVolume;
/* next data */
private double mXSum;
private double mYSum;
private double mVolumeSum;
private int mSumCount;
public Droplet(Point center, double volume){
mCenter = new Point(center.X, center.Y);
mVolume = volume;
resetNextData();
}
public Droplet(Droplet drop1) {
mCenter = new Point(drop1.mCenter.X, drop1.mCenter.Y);
mVolume = drop1.mVolume;
resetNextData();
}
public double getVolume() {
return mVolume;
}
public void resetNextData() {
mXSum = 0;
mYSum = 0;
mVolumeSum = 0;
mSumCount = 0;
}
public void addNextData(Point center, double volume) {
mXSum += center.X;
mYSum += center.Y;
mVolumeSum += volume;
mSumCount++;
}
public boolean compareSums(Droplet rhs){
System.out.println("mXSum: "+mXSum+" rhs.XSum:"+rhs.mXSum);
System.out.println("mYSum: "+mYSum+" rhs.YSum:"+rhs.mYSum);
System.out.println("mSumCount: "+mSumCount+" rhs.SumCount: "+rhs.mSumCount);
System.out.println("mVolumeSum: "+mVolumeSum+" rhs.mVolumeSum: "+rhs.mVolumeSum);
if(mXSum != rhs.mXSum){
System.out.println("mXSum: ");
return false;
}
if(mYSum != rhs.mYSum){
System.out.println("mYSum: ");
return false;
}
if(mVolumeSum != rhs.mVolumeSum){
System.out.println("mVolumeSum: ");
return false;
}
if(mSumCount != rhs.mSumCount){
System.out.println("mSumCount: ");
return false;
}
return true;
}
public void finalizePrediction() {
mXSum /= mSumCount;
mYSum /= mSumCount;
mVolumeSum /= mSumCount;
mVolume = mVolumeSum;
mCenter.X = (int) mXSum;
mCenter.Y = (int) mYSum;
if(mSumCount == 0){
mVolume = 0;
mCenter.X = 0;
mCenter.Y = 0;
mXSum = 0;
mYSum = 0;
mVolumeSum = 0;
}
}
public double getRadius() {
/* Volume = area of a circle */
/* area = Pi * r *r */
/* r = sqrt(area / Pi) */
double r = StrictMath.sqrt(mVolume / java.lang.Math.PI);
return r;
}
public Point getCenter() {
return mCenter;
}
}