Форум сайта python.su
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png) 
			 
							 0
  0   
								
								Центр двух сфер радиуса R1=20см и R2=80см располагаются в точках пространства, задаваемых с клавиатуры тройками координат. Определить, имеют ли сферы хоть одну общую точку.
ПОМОГИТЕ ПОЖАЛУЙСТА
В ПАЙТОНЕ)))))
Отредактировано ilya.zybulski (Апрель 6, 2021 14:19:25)
Офлайн
 
							 
							
						 294
  294   
								
								https://mathworld.wolfram.com/Sphere-SphereIntersection.html
[code python][/code]
Офлайн
 
							 0
  0   
								
								PEHDOMМне нужен код в пайтоне
https://mathworld.wolfram.com/Sphere-SphereIntersection.html
Офлайн
 
							 857
  857   
								
								Нужно сначала решить эту задачу математически. А потом уже для этого математического решения можно составлять общий алгоритм. А потом уже для этого общего алгоритма можно делать программу, реализующую его.
PEHDOMНе думаю, что тут нужно уравнение сферы. Задачка школьного уровня про расстояния между точками.
Sphere-SphereIntersection.html
Офлайн
 
							 
							
						 294
  294   
								
								py.user.nextвобще да, и там по ссылке на первой же картинке это досаточно наглядно показано, считаем расстояние меджу центрами, если оно равно или меньше суммы радиусов то имеют.
Задачка школьного уровня про расстояния между точками.
[code python][/code]
Офлайн
 
							 857
  857   
								
								PEHDOMНе, сфера это не шар. Если маленькая сфера находится внутри большой, то они запросто могут не иметь общих точек. И центр сферы точкой сферы не является, если что.
считаем расстояние меджу центрами, если оно равно или меньше суммы радиусов то имеют
 Так что задачка всё ещё школьного уровня, но чуть-чуть там надо пораскинуть мозгами.
 Так что задачка всё ещё школьного уровня, но чуть-чуть там надо пораскинуть мозгами.
					
						
						Офлайн
 
							 
							
						 294
  294   
								
								py.user.nextну ладно, сфера это поверхность шара, убедил
Не, сфера это не шар.
 
 
					
						
						[code python][/code]
Отредактировано PEHDOM (Апрель 6, 2021 23:43:18)
Офлайн
 
							 857
  857   
								
								ilya.zybulski , ну что, решил задачу? Как математически определить, есть ли у сфер хотя бы одна общая точка?
Офлайн
 
							 9
  9   
								
								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 задают )
Офлайн
 
							 857
  857   
								
								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)
Офлайн
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png)