/**
*
*/
package rampancy.util.vector;
import java.awt.geom.*;
import rampancy.util.*;
import robocode.util.Utils;
/**
* @author Matthew Chun-Lum
*
*/
public class RRepulsiveLine extends Line2D.Double implements RRepulsiveObject {
private static final long serialVersionUID = 264103247777266395L;
public double angle;
public double maxDistance;
public double danger;
public double multiplier;
public RRepulsiveLine(double x1, double y1, double x2, double y2, double maxDistance, double danger, double multiplier) {
this(new RPoint(x1, y1), new RPoint(x2, y2), maxDistance, danger, multiplier);
}
public RRepulsiveLine(RPoint start, RPoint end, double maxDistance, double danger, double multiplier) {
super(start, end);
this.maxDistance = maxDistance;
this.danger = danger;
this.multiplier = multiplier;
angle = RUtil.computeAbsoluteBearing(start, end);
}
public RVector getForceAtPoint(RPoint point) {
double dist = ptLineDist(point);
if(dist > maxDistance)
return null;
double computedDanger = danger / (dist * dist * (1.0 /multiplier));
int dir = relativeCCW(point);
double computedAngle = Utils.normalAbsoluteAngle(angle + dir *Math.PI / 2);
return new RVector(point, computedAngle, computedDanger);
}
}