Проверка что созданный треугольник существует и не является дегенеративным
Здраствуйте, код по проверки дегенеративности есть, но если может кто подсказать если верно сделан или если есть другие варианты, а то вроде код есть а проверку дегенеративность не проходит))).
public Triangle(Point a, Point b, Point c) {
if ((length1<=length2 && length2<=length3)&&((length1+length2) == length3))/*(((length1+length2) < length3)||((length1+length3) < length2)||((length2+length3) <
length1))*/
throw new IllegalArgumentException("Triangle is degenerative");
тут какбы должен пройти проверку но ничего не случается.
double length1(Point a, Point b) {
double xDistanceSquare = Math.pow(a.getX() - b.getX(), 2);
double yDistanceSquare = Math.pow(a.getY() - b.getY(), 2);
return Math.sqrt(xDistanceSquare + yDistanceSquare);
}
double length2(Point a, Point c) {
double xDistanceSquare = Math.pow(a.getX() - c.getX(), 2);
double yDistanceSquare = Math.pow(a.getY() - c.getY(), 2);
return Math.sqrt(xDistanceSquare + yDistanceSquare);
}
double length3(Point c, Point b) {
double xDistanceSquare = Math.pow(c.getX() - b.getX(), 2);
double yDistanceSquare = Math.pow(c.getY() - b.getY(), 2);
return Math.sqrt(xDistanceSquare + yDistanceSquare);
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Раз вам даны точки, то треугольник, конечно, существует, а вырожденность можно проверить, узнав, лежат ли точки на одной прямой
(собственно, через векторное произведение считается удвоенная площадь, как Akina уже отметил, только с координатами Герон не нужен)
public Triangle(Point a, Point b, Point c) {
if ((a.getX()-b.getX())*(c.getY()-b.getY())-(a.getY()-b.getY())*(c.getX()-b.getX())==0)
throw new IllegalArgumentException("Triangle is degenerative");
Если координаты внутри Point у вас не целые, то сравнивайте абсолютное значение указанного выражения с малой величиной (скажем, 1.0e-10 )