package pr01; public class Triangle { private static final double PRECISION = 0.0000000001; private double side1; private double side2; private double angle; public Triangle(double side1, double angle, double side2) { this.side1 = side1; this.angle = angle; this.side2 = side2; } public double getSide1() { return side1; } public double getAngle() { return angle; } public double getSide2() { return side2; } public boolean isValid() { return side1 > 0 && side2 > 0 && angle > 0 && angle < 180; } public double getSide3() { if (!isValid()) return 0; double convertedAngle = Math.toRadians(angle); double side3s = side1*side1 + side2*side2 - 2*side1*side2*Math.cos(convertedAngle); return Math.sqrt(side3s); } public double getArea() { if (!isValid()) return 0; double convertedAngle = Math.toRadians(angle); return side1 * side2 * Math.sin(convertedAngle)/2; } public boolean isEquilateral() { return isValid() && almostEqual(side1, side2) && (angle == 60.0); } public boolean isIsosceles() { if (!isValid()) return false; if (almostEqual(side1, side2)) return true; double side3 = getSide3(); return almostEqual(side1, side3) || almostEqual(side2, side3); } private boolean almostEqual(double x, double y) { return Math.abs(x-y) < PRECISION; } public boolean isRight() { double thirdSide = getSide3(); if (almostEqual(thirdSide*thirdSide, side1*side1 + side2*side2)) return true; if (almostEqual(side1*side1,thirdSide*thirdSide + side2*side2)) return true; if (almostEqual(side2*side2,thirdSide*thirdSide + side1*side1)) return true; return false; } public String toString() { return "Triangle with sides "+side1+" and " + side2 + " and included angle "+angle + " degrees"; } }