Форум сайта python.su
Центр двух сфер радиуса R1=20см и R2=80см располагаются в точках пространства, задаваемых с клавиатуры тройками координат. Определить, имеют ли сферы хоть одну общую точку.
ПОМОГИТЕ ПОЖАЛУЙСТА
В ПАЙТОНЕ)))))
Отредактировано ilya.zybulski (Апрель 6, 2021 14:19:25)
Офлайн
https://mathworld.wolfram.com/Sphere-SphereIntersection.html
[code python][/code]
Офлайн
PEHDOMМне нужен код в пайтоне
https://mathworld.wolfram.com/Sphere-SphereIntersection.html
Офлайн
Нужно сначала решить эту задачу математически. А потом уже для этого математического решения можно составлять общий алгоритм. А потом уже для этого общего алгоритма можно делать программу, реализующую его.
PEHDOMНе думаю, что тут нужно уравнение сферы. Задачка школьного уровня про расстояния между точками.
Sphere-SphereIntersection.html
Офлайн
py.user.nextвобще да, и там по ссылке на первой же картинке это досаточно наглядно показано, считаем расстояние меджу центрами, если оно равно или меньше суммы радиусов то имеют.
Задачка школьного уровня про расстояния между точками.
[code python][/code]
Офлайн
PEHDOMНе, сфера это не шар. Если маленькая сфера находится внутри большой, то они запросто могут не иметь общих точек. И центр сферы точкой сферы не является, если что.
считаем расстояние меджу центрами, если оно равно или меньше суммы радиусов то имеют
Офлайн
py.user.nextну ладно, сфера это поверхность шара, убедил
Не, сфера это не шар.
[code python][/code]
Отредактировано PEHDOM (Апрель 6, 2021 23:43:18)
Офлайн
ilya.zybulski , ну что, решил задачу? Как математически определить, есть ли у сфер хотя бы одна общая точка?
Офлайн
py.user.next, наверное решил, раз молчит
А если не знает, то может ему алгоритм поможет и сам код уже написать не будет проблемой.
Тройки координат задают центр сфер, получается что исходные условия будут такие:
имеем точку А с координатами (x1, y1, z1), которая является центром первой сферы с радиусом R1 = 20 см
имеем точку В с координатами (x2, y2, z2), которая является центром второй сферы с радиусом R2 = 80 см
Решение:
1) Длину отрезка АВ (между центрами сфер) обозначим как L и будем вычислять ее по формуле https://i.ytimg.com/vi/cavwFx4Xd0o/maxresdefault.jpg (самая нижняя на картинке, та что для пространства)
2) Определяем условия, которые будут соответствовать возможному взаимному расположению сфер.
2.1. Условие: L > R1+R2
Это самый простой вариант: сферы не пересекаются, потому что расположены далеко друг от друга
2.2. Условие L < R2 - R1, cферы не пересекаются, потому что одна из них полностью расположена внутри другой
2.3. Сферы касаются в одной точке
Таких возможных пересечений может быть 2:
- yсловие: L = R1+R2, когда сфера с меньшим радиусом расположена за пределами сферы с большим радиусом
- yсловие: L = R2-R1, когда сфера с меньшим радиусом расположена внутри сферы с большим радиусом
2.4. Сферы пересекаются и областью их пересечения является окружность (но это в задаче не спрашивается, так что пофигу. У них даже больше одной точки пересечения, значит достаточно ответить “Да”)
Условие: R1+R2 > L > R2 - R1
3. Выводим результат, если:
- выполняется 2.1 или 2.2 , то ответ “Нет
- выполняется 2.3 или 2.4, то ответ ”Да"
Пы.Сы. Интересно для какого класса эту задачу на Python задают )
Офлайн
OceanУ нас в детском саду робототехнику изучают. Английский сейчас тоже бывает с разного возраста, к тому же есть частные школы и дополнительное образование, где английский можно с пяти лет изучать, просто платишь отдельно. Стандартная школьная программа в плане информатики и английского тоже сейчас гибче стала. Раньше начинают, чем у нас было. А у меня в школе было то, что у моего брата старшего вообще не было в школе. Поэтому ко мне привозили видики все его друзья, чтобы я им в 13-15 лет их свадьбы переписывал с кассеты на кассету, ну и порнуху тоже.
Интересно для какого класса эту задачу на Python задают
Ocean
- выполняется 2.3 или 2.4, то ответ ”Да"
>>> def points_distance3d(x1, y1, z1, x2, y2, z2): ... return ((x1 - x2) ** 2 + (y1 - y2) ** 2 + (z1 - z2) ** 2) ** 0.5 ... >>> def spheres_intersect(o1, r1, o2, r2): ... dist = points_distance3d(*o1, *o2) ... return r1 + r2 >= dist >= r2 - r1 ... >>> def f(): ... o1 = tuple(map(float, input('Input x1 y1 z1: ').split())) ... r1 = 20 ... o2 = tuple(map(float, input('Input x2 y2 z2: ').split())) ... r2 = 80 ... spherefmt = '<{} r={}>' ... if spheres_intersect(o1, r1, o2, r2): ... print('Spheres {} and {} intersect'.format( ... spherefmt.format(o1, r1), ... spherefmt.format(o2, r2))) ... else: ... print('Spheres {} and {} don\'t intersect'.format( ... spherefmt.format(o1, r1), ... spherefmt.format(o2, r2))) ... >>> f() Input x1 y1 z1: 0 0 0 Input x2 y2 z2: 100 0 0 Spheres <(0.0, 0.0, 0.0) r=20> and <(100.0, 0.0, 0.0) r=80> intersect >>> f() Input x1 y1 z1: 0 0 0 Input x2 y2 z2: 101 0 0 Spheres <(0.0, 0.0, 0.0) r=20> and <(101.0, 0.0, 0.0) r=80> don't intersect >>>
Отредактировано py.user.next (Апрель 16, 2021 04:22:08)
Офлайн