Есть два класса, вот условия:
Реализуйте методы класса Segment (отрезок):
Конструктор, в который в качестве параметров передаются координаты точек начала и конца отрезка.
Убедитесь, что созданный отрезок существует и не является вырожденным, что означает, что начало и конец отрезка не являются одной и той же точкой.
Если это не так, используйте throw new IllegalArgumentException(), чтобы вызвать ошибку.
double length() – возвращает длину сегмента.
Point middle() – возвращает среднюю точку сегмента.
Point intersection(Segment another) – возвращает точку пересечения текущего отрезка с другим.
Возвращает null, если такой точки нет.
Возвращает null, если сегменты коллинеарны.
Обратите внимание, что точка пересечения должна лежать на обоих сегментах.
Класс Point уже существует.
Класс Point
https://onlinegdb.com/YId0YlsU-
Класс Segment
https://onlinegdb.com/fPp90Vi3r
Класс Main (Test)
https://onlinegdb.com/5fVCzbmb_
Класс SegmentTest
https://onlinegdb.com/3RCLlKM9W
Java
Не могу пройти Unit тесты
Мистер, ваш алгоритм поиска точки пересечения неправильный. Вам же была дана ссылка на источник, где можно брать информацию о том, как вычисляется точка пересечения двух отрезков.
Для вас программно написал алгоритм, но ваши p1, p2 заменил, некорректно немного):
Point intersection(Segment another)
{
Point start2 = another.start;
Point end2 = another.end;
double t = ((((start.getX() - start2.getX()) * (start2.getY() - end2.getY()))
- ((start.getY() - start2.getY()) * (start2.getX() - end2.getX())))
/ ((((start.getX() - end.getX()) * (start2.getY() - end2.getY()))
- ((start.getY() - end.getY()) * (start2.getX() - end2.getX())))));
double u = ((((start.getX() - start2.getX()) * (start.getY() - end.getY()))
- ((start.getY() - start2.getY()) * (start.getX() - end.getX())))
/ ((((start.getX() - end.getX()) * (start2.getY() - end2.getY()))
- ((start.getY() - end.getY()) * (start2.getX() - end2.getX())))));
double x = (start.getX() + t * (end.getX() - start.getX()));
double y = (start.getY() + t * (end.getY() - start.getY()));
if (0.0 <= t && t <= 1.0 && 0.0 <= u && u <= 1.0)
{
return new Point(x, y);
}
else
{
return null;
}
}
Для вас программно написал алгоритм, но ваши p1, p2 заменил, некорректно немного):
Point intersection(Segment another)
{
Point start2 = another.start;
Point end2 = another.end;
double t = ((((start.getX() - start2.getX()) * (start2.getY() - end2.getY()))
- ((start.getY() - start2.getY()) * (start2.getX() - end2.getX())))
/ ((((start.getX() - end.getX()) * (start2.getY() - end2.getY()))
- ((start.getY() - end.getY()) * (start2.getX() - end2.getX())))));
double u = ((((start.getX() - start2.getX()) * (start.getY() - end.getY()))
- ((start.getY() - start2.getY()) * (start.getX() - end.getX())))
/ ((((start.getX() - end.getX()) * (start2.getY() - end2.getY()))
- ((start.getY() - end.getY()) * (start2.getX() - end2.getX())))));
double x = (start.getX() + t * (end.getX() - start.getX()));
double y = (start.getY() + t * (end.getY() - start.getY()));
if (0.0 <= t && t <= 1.0 && 0.0 <= u && u <= 1.0)
{
return new Point(x, y);
}
else
{
return null;
}
}
Марина Крупина
Спасибо что так заморочились) Удачи Вам!
ну так может вы и покажете что за ошибка?
навскидку если смотреть...
методы length(), middle(), и intersection(...) все скрытые... а вы их вызывать пытаетесь... тут не то что тест не проходит... тут вообще запускаться не должно...
странно что вы пишете такие "навороченные" юнит тесты, но совершенно не въезжаете в прописные истины...
навскидку если смотреть...
методы length(), middle(), и intersection(...) все скрытые... а вы их вызывать пытаетесь... тут не то что тест не проходит... тут вообще запускаться не должно...
странно что вы пишете такие "навороченные" юнит тесты, но совершенно не въезжаете в прописные истины...
Изучите контракт equals и hashCode
В классе Point не переопределены эти методы, а значит equals работает некорректно
Стандартный в Object сравнивает адреса в памяти, а не значения в классе
Либо не переопределяйте, но и не используйте equals для сравнения точек, а сравнивайте прям координаты
Остальное не смотрел, вы даже не написали собственно в чем проблема
Не можете пройти unit тесты - слишком абстрактно. Конкретней надо задавать, желательно
Вот если начнете расписывать подробно проблему - вероятно сами ее и исправите
В классе Point не переопределены эти методы, а значит equals работает некорректно
Стандартный в Object сравнивает адреса в памяти, а не значения в классе
Либо не переопределяйте, но и не используйте equals для сравнения точек, а сравнивайте прям координаты
Остальное не смотрел, вы даже не написали собственно в чем проблема
Не можете пройти unit тесты - слишком абстрактно. Конкретней надо задавать, желательно
Вот если начнете расписывать подробно проблему - вероятно сами ее и исправите
Марина Крупина
Не могу пройти тесты из раздела, либо 4 5 6 не проходит, либо их проходит, но возникает ошибка в 10 11 12. И так на протяжении всего дня, даже код менял на более простой, именно в этих участках возникает проблема. Почему-то в юнит тестах прописан возврат null в 10. 11, 12 тестах, хотя линии там пересекаются в конкретных точках, я лично проверял на сайтах и чертил графики вручную.
Что касается equals, там все работает корректно, и метод length() у меня работает криво, его я исправлю сам. Мне лишь надо пройти тест для метода intersection()
Что касается equals, там все работает корректно, и метод length() у меня работает криво, его я исправлю сам. Мне лишь надо пройти тест для метода intersection()

Похожие вопросы
- Бывали ли у вас такие случаи, тогда unit тесты не приносили пользы, а только создавали лишнюю нагрузку на разработчиков?
- Что значит "код покрыт тестами"?
- У меня не прошло программирование, значит не мое?
- C# Помогите написать генератор паролей на C# ,что бы он мог генерировать нужное кол-во паролей.
- 2.11 Практическая работа Создайте проект с именем AgeComparator,я зделал небольшой прект можете его пж доработать?
- Не могу разобраться с ASCII.
- Не могу никак разобраться с этими IF ELSE и фигурными скобками. JAVA
- Meтoд поглощения! Можете про него что-то рассказать, пожалуйста? Задание такое получил в универе. А инфы толковой не нашел.
- Не могу понять ОБЪЕКТЫ в языках программ. Объясните простыми словами
- почему одни переменные могут объявлять буквы другие цифры?