Уважаемые друзья, в одной из задач приведенным ниже кодом мы определяем пересеклись ли траектории объектов, вод выдержка из условия:
А еще нам нужно будет определять попал шарик в кирпич или в подставку.
Это будем делать так:
В этом же классе, создадим специальный метод: boolean isIntersec(BaseObject o)
Он будет определять — «пересеклись» объекты или нет. Если пересеклись — возвращать true, если нет — false.
Т.к. объекты мы условно считаем кругами, то предлагаю такую формулу взаимодействия
Если центр круга одного объекта попал в круг другого, то будем считать, что они столкнулись.
Или еще проще:
дистанция_между_объектами <= max (радиус_первого_объекта, радиус_второго_объекта)
код:
public boolean isIntersec(BaseObject o){
double xDistance = this.getX() - o.getX();
double yDistance = this.getY() - o.getY();
double distance = Math.sqrt((xDistance*xDistance)+(yDistance*yDistance));
return distance < Math.max(this.getRadius(), o.getRadius()) ;
}
1. Какой математический принцип(То что используется теорема Пифагора я и сам вижу, как она позволяет сделать вывод о дистанции между точками на плоскости?) используется в данном коде и почему мы считаем что код верно определит пересекались ли объекты.
2. Почему в данной задаче, как и в предыдущих, при наличии геттеров и сеттеров, валидатор пропускает только когда обращаешся непосредственно к переменным, как правильно все же? А главное почему?
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
расстояние между объектами — прямая линия (гепотинуза)
нам надо её найти и Пифагор нам в помощь.
Нашли, теперь если гипотенуза меньше чем радиус большего объекта (т.е. центра одного объекта внутри другого), значит они пересеклись.
Идеально тут было бы считать сумму радиусов