Проверьте, что созданный треугольник не является вырожденным. Если это так, используйте throw new IllegalArgumentException()
Все тесты проходят кроме кроме одного со следующими значениями (new Point(1, 3), new Point(3, 9), new Point(2, 6)
if (a.getX() + a.getY() + (b.getX() + b.getY()) <= (c.getX() + c.getY()))
{
throw new IllegalArgumentException();
}
вот весь код:(сама задача про нахождения площади и цент)
class Triangle {
Point a,b,c;
public Triangle(Point a, Point b, Point c) {
//TODO
length(a, b);
length2(a, c);
length3(a, c);
if (a.getX() + a.getY() + (b.getX() + b.getY()) <= (c.getX() + c.getY()))
{
throw new IllegalArgumentException();
}
{
this.a = a;
this.b = b;
this.c = c;
}
}
public static double length(Point a, Point b)
{
return Math.sqrt(Math.pow(b.getX()- a.getX(), 2) + Math.pow(b.getY()- a.getY(), 2.0));
}
public static double length2(Point a, Point c)
{
return Math.sqrt(Math.pow(c.getX() - a.getX(), 2)+ Math.pow(c.getY() - a.getY(), 2.0));
}
public static double length3(Point b, Point c)
{
return Math.sqrt(Math.pow(c.getX() - b.getX(), 2)+ Math.pow(c.getY() - b.getY(), 2.0));
}
public double area() {
//TODO
return Math.abs((a.getX() - c.getX()) * (b.getY() - a.getY()) - (a.getX() - b.getX()) * (c.getY() - a.getY())) /2.0;
}
public Point centroid(){
//TODO
double x= (a.getX()+b.getX()+c.getX())/3;
double y= (a.getY()+b.getY()+c.getY())/3;
return new Point(x, y);
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Как вариант, при создании треугольника проверить точки, вычислить длины сторон и проверить соотношение сторон:
class Triangle {
private final Point a, b, c;
private final double ab, ac, bc;
public Triangle(Point a, Point b, Point c) {
if (null == a || null == b || null == c) {
throw new NullPointerException("Null point");
}
this.a = a;
this.b = b;
this.c = c;
this.ab = length(a, b);
this.ac = length(a, c);
this.bc = length(b, c);
if (ab + ac <= bc || ab + bc <= ac || ac + bc <= ab) {
throw new IllegalArgumentException("Invalid/degenerate triangle");
}
}
public static double length(Point a, Point b) {
double dx = a.getX() - b.getX();
double dy = a.getY() - b.getY();
return Math.sqrt(dx * dx + dy * dy);
}
public double area() {
return Math.abs(
(a.getX() - c.getX()) * (b.getY() - a.getY()) -
(a.getX() - b.getX()) * (c.getY() - a.getY())
) / 2.0;
}
public Point centroid() {
double x = (a.getX() + b.getX() + c.getX()) / 3;
double y = (a.getY() + b.getY() + c.getY()) / 3;
return new Point(x, y);
}
}