|
|
package challenge;
|
|
|
|
|
|
import basic.Shape;
|
|
|
import advanced.Resizable;
|
|
|
|
|
|
/**
|
|
|
* 椭圆形类,实现Shape接口和Resizable接口
|
|
|
*/
|
|
|
public class Ellipse implements Shape, Resizable {
|
|
|
private String color;
|
|
|
private double semiMajorAxis; // 长半轴
|
|
|
private double semiMinorAxis; // 短半轴
|
|
|
|
|
|
/**
|
|
|
* 构造方法
|
|
|
* @param color 椭圆形的颜色
|
|
|
* @param semiMajorAxis 长半轴
|
|
|
* @param semiMinorAxis 短半轴
|
|
|
*/
|
|
|
public Ellipse(String color, double semiMajorAxis, double semiMinorAxis) {
|
|
|
this.color = color;
|
|
|
this.semiMajorAxis = Math.max(semiMajorAxis, semiMinorAxis); // 确保长半轴不小于短半轴
|
|
|
this.semiMinorAxis = Math.min(semiMajorAxis, semiMinorAxis);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public String getColor() {
|
|
|
return color;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public double getArea() {
|
|
|
return Math.PI * semiMajorAxis * semiMinorAxis;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void display() {
|
|
|
System.out.println("Ellipse [color=" + color + ", semiMajorAxis=" + semiMajorAxis + ", semiMinorAxis=" + semiMinorAxis + ", area=" + getArea() + "]");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void enlarge(double factor) {
|
|
|
if (factor > 0) {
|
|
|
this.semiMajorAxis *= factor;
|
|
|
this.semiMinorAxis *= factor;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void shrink(double factor) {
|
|
|
if (factor > 0 && factor < 1) {
|
|
|
this.semiMajorAxis *= factor;
|
|
|
this.semiMinorAxis *= factor;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public String getSizeInfo() {
|
|
|
return "Ellipse with semi-major axis: " + semiMajorAxis + ", semi-minor axis: " + semiMinorAxis + ", area: " + getArea();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取长半轴
|
|
|
* @return 长半轴
|
|
|
*/
|
|
|
public double getSemiMajorAxis() {
|
|
|
return semiMajorAxis;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置长半轴
|
|
|
* @param semiMajorAxis 新的长半轴
|
|
|
*/
|
|
|
public void setSemiMajorAxis(double semiMajorAxis) {
|
|
|
this.semiMajorAxis = semiMajorAxis;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取短半轴
|
|
|
* @return 短半轴
|
|
|
*/
|
|
|
public double getSemiMinorAxis() {
|
|
|
return semiMinorAxis;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置短半轴
|
|
|
* @param semiMinorAxis 新的短半轴
|
|
|
*/
|
|
|
public void setSemiMinorAxis(double semiMinorAxis) {
|
|
|
this.semiMinorAxis = semiMinorAxis;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置颜色
|
|
|
* @param color 新的颜色
|
|
|
*/
|
|
|
public void setColor(String color) {
|
|
|
this.color = color;
|
|
|
}
|
|
|
} |