You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}
}