Есть часть задачи:
Создать абстрактный класс Фигур, дале создать пакет для фигур треугольников. И в нем создать классы следующих фигур:Треугольник
Равнобедренный треугольник
Равносторонний треугольник
Прямоугольный треугольникВ них, как мне показалось, логично создать методы для высчитывания площади и периметра. Получилась такая вот иерархия классов:
Shape (Абстрактный класс для всех Фигур): package shape;
import java.math.BigDecimal;
import java.math.RoundingMode;
public abstract class Shape {
private final double[] shapeParameters;
private double perimeter;
private double area;
public Shape(double[] shapeParameters) {
this.shapeParameters = shapeParameters;
calculatingPerimeter();
calculatingArea();
}
public double[] getShapeParameters() {
return shapeParameters;
}
public double getPerimeter() {
return perimeter;
}
public double getArea() {
return area;
}
public void setPerimeter(double perimeter) {
BigDecimal bigDecimalPerimeter = new BigDecimal(perimeter);
BigDecimal roundedPerimeter = bigDecimalPerimeter.setScale(2, RoundingMode.HALF_UP);
this.perimeter = roundedPerimeter.doubleValue();
}
public void setArea(double area) {
BigDecimal BigDecimalArea = new BigDecimal(area);
area = BigDecimalArea.setScale(2, RoundingMode.HALF_UP).doubleValue();
this.area = area;
}
abstract public void calculatingPerimeter();
abstract public void calculatingArea(); Далее переходим в пакет triangle -> В этом пакете класс Triangle наследуется от абстрактного класса Shape, а все последующие классы наследуются от класса Triangle
Класс Triangle: public Triangle(double[] sides) {
super(sides);
}
public void calculatingPerimeter(){
double[] sides = getShapeParameters();
setPerimeter(sides[0] + sides[1] + sides[2]);
}
public void calculatingArea(){
double[] sides = getShapeParameters();
double semiPerimeter = getPerimeter() / 2;
setArea(Math.sqrt(semiPerimeter * (semiPerimeter - sides[0]) * (semiPerimeter - sides[1]) * (semiPerimeter - sides[2])));
} Класс RightTriangle: public RightTriangle(double[] sides) {
super(sides);
}
@Override
public void calculatingArea() {
double[] sides = getShapeParameters();
setArea(0.5 * sides[0] * sides[1]);
} Класс IsoscelesTriangle: public IsoscelesTriangle(double[] sides) {
super(sides);
} Класс EquilateralTriangle: public EquilateralTriangle(double[] sides) {
super(sides);
} В чем собственно проблема: я не понимаю верно ли высчитываются площадь и периметр всех треугольников. Я в геометрии вообще ничего не понимаю. И когда попытался поискать формулы в интернете - запутался окончательно. Т.к. этих формул достаточно много, я толком не понял какие использовать оптемальнее всего. Может кто проверить, верно ли высчитываются формулы. Ну и в общем, что лучше изменить, переделать итд. Заранее спасибо!
Создать абстрактный класс Фигур, дале создать пакет для фигур треугольников. И в нем создать классы следующих фигур:Треугольник
Равнобедренный треугольник
Равносторонний треугольник
Прямоугольный треугольникВ них, как мне показалось, логично создать методы для высчитывания площади и периметра. Получилась такая вот иерархия классов:
Shape (Абстрактный класс для всех Фигур): package shape;
import java.math.BigDecimal;
import java.math.RoundingMode;
public abstract class Shape {
private final double[] shapeParameters;
private double perimeter;
private double area;
public Shape(double[] shapeParameters) {
this.shapeParameters = shapeParameters;
calculatingPerimeter();
calculatingArea();
}
public double[] getShapeParameters() {
return shapeParameters;
}
public double getPerimeter() {
return perimeter;
}
public double getArea() {
return area;
}
public void setPerimeter(double perimeter) {
BigDecimal bigDecimalPerimeter = new BigDecimal(perimeter);
BigDecimal roundedPerimeter = bigDecimalPerimeter.setScale(2, RoundingMode.HALF_UP);
this.perimeter = roundedPerimeter.doubleValue();
}
public void setArea(double area) {
BigDecimal BigDecimalArea = new BigDecimal(area);
area = BigDecimalArea.setScale(2, RoundingMode.HALF_UP).doubleValue();
this.area = area;
}
abstract public void calculatingPerimeter();
abstract public void calculatingArea(); Далее переходим в пакет triangle -> В этом пакете класс Triangle наследуется от абстрактного класса Shape, а все последующие классы наследуются от класса Triangle
Класс Triangle: public Triangle(double[] sides) {
super(sides);
}
public void calculatingPerimeter(){
double[] sides = getShapeParameters();
setPerimeter(sides[0] + sides[1] + sides[2]);
}
public void calculatingArea(){
double[] sides = getShapeParameters();
double semiPerimeter = getPerimeter() / 2;
setArea(Math.sqrt(semiPerimeter * (semiPerimeter - sides[0]) * (semiPerimeter - sides[1]) * (semiPerimeter - sides[2])));
} Класс RightTriangle: public RightTriangle(double[] sides) {
super(sides);
}
@Override
public void calculatingArea() {
double[] sides = getShapeParameters();
setArea(0.5 * sides[0] * sides[1]);
} Класс IsoscelesTriangle: public IsoscelesTriangle(double[] sides) {
super(sides);
} Класс EquilateralTriangle: public EquilateralTriangle(double[] sides) {
super(sides);
} В чем собственно проблема: я не понимаю верно ли высчитываются площадь и периметр всех треугольников. Я в геометрии вообще ничего не понимаю. И когда попытался поискать формулы в интернете - запутался окончательно. Т.к. этих формул достаточно много, я толком не понял какие использовать оптемальнее всего. Может кто проверить, верно ли высчитываются формулы. Ну и в общем, что лучше изменить, переделать итд. Заранее спасибо!