package com.baselet.control.basics;
public class XValues {
private Double left;
private Double right;
public XValues(double left, double right) {
super();
this.left = left;
this.right = right;
}
public double getLeft() {
return left;
}
public double getRight() {
return right;
}
public double getSpace() {
return right - left;
}
public void addLeft(double inc) {
left += inc;
}
public void subRight(double inc) {
right -= inc;
}
public static XValues createForEllipse(double y, double height, double width) {
double halfHeight = height / 2.0;
double halfWidth = width / 2.0;
double halfEllipseWidthOnY = Math.sqrt((1 - Math.pow(halfHeight - y, 2) / Math.pow(halfHeight, 2)) * Math.pow(halfWidth, 2));
XValues returnVal = new XValues(halfWidth - halfEllipseWidthOnY, halfWidth + halfEllipseWidthOnY);
return returnVal;
}
/**
* returns the intersection of both points [eg: (2,5) intersect (1,4) = (2,4)]
* @param nanPriority if true then NaN has priority over other values, otherwise other values have priority
*/
public XValues intersect(XValues other, boolean nanPriority) {
Double maxLeft = left;
Double minRight = right;
if (nanPriority) {
if (other.left.equals(Double.NaN) || other.left > left) {
maxLeft = other.left;
}
if (other.right.equals(Double.NaN) || other.right < right) {
minRight = other.right;
}
}
else {
if (left.equals(Double.NaN) || other.left > left) {
maxLeft = other.left;
}
if (right.equals(Double.NaN) || other.right < right) {
minRight = other.right;
}
}
return new XValues(maxLeft, minRight);
}
@Override
public String toString() {
return "XValues [left=" + left + ", right=" + right + "]";
}
}