Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 17.11.2012
Сообщений: 27
1

Касаются ли окружности в одной точке?

31.05.2013, 21:42. Показов 6950. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создайте в классе Circle метод, проверяющий, касаются ли окружности в одной точке. Учтите, что возможен вариант, когда одна окружность содержится внутри другой и при этом всё равно возможно касание в одной точке.
Есть класс
Java
1
2
3
4
5
class Circle {
    public double x;
    public double y;
    public double r;
}
x, y - координаты, r - радиус.
Java
1
2
3
public boolean touchWith(Circle c) {
        return c.x*c.x+c.y*c.y-c.r*c.r==this.x*this.x+this.y*this.y-this.r*this.r;
    }
Ответ всегда получается истина, что неверно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2013, 21:42
Ответы с готовыми решениями:

Создать в классе Circle метод, проверяющий, касаются ли окружности в одной точке
Создайте в классе Circle метод, проверяющий, касаются ли окружности в одной точке. Учтите, что...

Отношения квадрата и окружности с центром в одной точке
Ребят, всем доброго дня. Я написала программу, но не могу найти ошибки. Помогите пожалуйста их...

Определить лежат ли точки на одной окружности с центром в точке О
Заданы координаты двух точек. Определить лежат ли они на одной окружности с центром в точке О(х0,...

Окружности касаются внешним образом
2) Окружности радиусов 11 и 21 с центрами O1 и O2 соответственно касаются внешним образом в точке...

10
6 / 6 / 3
Регистрация: 21.04.2013
Сообщений: 19
01.06.2013, 01:38 2
Касание должно быть только в одной? У меня код выдал false, хотя должен был бы - true.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Circle {
    public double x;
    public double y;
    public double r;
    Circle(int x, int y, int r) {
        this.x = x;
        this.y = y;
        this.r = r;};
    public boolean touchWith(Circle c) {
        return c.x*c.x+c.y*c.y-c.r*c.r==this.x*this.x+this.y*this.y-this.r*this.r;
    }
}
 
public class CircleTest {
 
    public static void main(String[] args) {
            Circle circle_1 = new Circle(5, 5, 4);
            Circle circle_2 = new Circle(0, 0, 3);
            System.out.println(circle_1.touchWith(circle_2));
        }
}
Добавлено через 20 минут
Вот так работает, если только 1 точка:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Circle {
    public double x;
    public double y;
    public double r;
    Circle(int x, int y, int r) {
        this.x = x;
        this.y = y;
        this.r = r;};
    public boolean touchWith(Circle c) {
        double length = Math.sqrt((this.x - c.x) * (this.x - c.x) + (this.y - c.y) * (this.y - c.y));
        return length == this.r + c.r || length == Math.abs(this.r - c.r);
    }
}
 
public class CircleTest {
 
    public static void main(String[] args) {
            Circle circle_1 = new Circle(0, 5, 2);
            Circle circle_2 = new Circle(0, 0, 3);
            System.out.println(circle_1.touchWith(circle_2));
        }
}
0
23 / 23 / 7
Регистрация: 21.04.2013
Сообщений: 52
01.06.2013, 08:19 3
это условие просто неверно (c.x*c.x+c.y*c.y-c.r*c.r==this.x*this.x+this.y*this.y-this.r*this.r). уравнение окружности х*х + у*у - г*г = 0. и если бы окружности задавались именно уравнениями, то сравнение было бы эквивалентно 0 == 0, что всегда тру.
в примере выше разве что в строке
double length = Math.sqrt((this.x - c.x) *...
можно не брать модуль )
0
91 / 91 / 10
Регистрация: 18.05.2013
Сообщений: 265
01.06.2013, 16:00 4
2Бородатый Админ:
Вы неверно решили задачу прежде всего математически.
Еще раз запишите на бумаге уравнение окружностей, решите его аналитически ... а потом программируйте ...
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
03.06.2013, 10:26 5
А когда будете реализовывать, не забудьте, что вычисления в Java происходят с определенной точностью, в результате чего сравнение через == будет выдавать неправильные результаты. Сравнивать надо через оценку разницы по модулю.
0
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
03.06.2013, 11:43 6
В задаче не сказано, но судя по всему, это происходит на плоскости.

Тогда расстояние между центрами окружностей dist = √[(x2 – x1)2 + (y2 – y1)2]

Если | r2 + r1 – dist | < ε ИЛИ | | r2 – r1 | – dist | < ε тогда окружности касаются в одной точке.

Вроде так.

Зачем тут уравнения окружностей - не ясно.
0
91 / 91 / 10
Регистрация: 18.05.2013
Сообщений: 265
03.06.2013, 13:15 7
2Gibby:
Смотрите, там речь идет о решении задачи о ПЕРЕСЕЧЕНИЯ ... а математически - это оперирование именно системой уравнений ф-й .... смысл ковырять расстояние между центрами ?
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
03.06.2013, 13:42 8
Цитата Сообщение от edwin3d Посмотреть сообщение
смысл ковырять расстояние между центрами ?
Смысл геометрический. Если расстояние равно сумме радиусов - пересекаются в одной точке. Если больше - не пересекаются. Если меньше: если расстояние равно разнице радиусов, то касается в одной точке изнутри. Если меньше - не касаются, окружности вложены. Если больше - два пересечения.
2
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
03.06.2013, 13:44 9
Цитата Сообщение от edwin3d Посмотреть сообщение
а математически - это оперирование именно системой уравнений ф-й
Математически решение системы уравнений кривых (не функций) будет эквивалентно тому, что я написал. А решать в 5 раз дольше.
0
91 / 91 / 10
Регистрация: 18.05.2013
Сообщений: 265
03.06.2013, 16:38 10
Таки да, виноват, излишне абстрагировался от задачи ....
0
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
03.06.2013, 17:29 11
Overengineering это не только в программировании проблема
0
03.06.2013, 17:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2013, 17:29
Помогаю со студенческими работами здесь

Две окружности касаются внутренним образом
Две окружности имеющие радиусы r и 3r касаются внутренним образом. Отрезок AB с концами на большей...

Определить, пересекаются ли окружности, касаются друг друга или не имеют общих точек
Задача 2. Две окружности заданы координатами центра и радиусами. Определить, пересекаются ли они,...

Нарисовать 100 прямых линий, имеющих общее начало в одной точке и конец в случайной точке экрана
Нарисовать 100 прямых линий, имеющих общее начало в одной точке и конец в случайной точке экрана.

Постройте две окружности, имитируя движение одной окружности по другой
Постройте на экране компьютера две окружности радиусов R1, R2 разных цветов, имитируя движение...

Написать программу, проверяющую, пересекаются ли окружность и прямая, или они касаются друг друга, или не пересекаются и не касаются
Заданы окружность радиуса R с центром в начале координат и прямая, проходящая через точки А (х; у)...

Нужно сделать одной командой несколько окружностей находящихся в одной окружности
Пожалуйста


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru