Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 02.12.2020
Сообщений: 13

Как остановить два круга при их столкновении?

14.02.2022, 16:48. Показов 1146. Ответов 1

Студворк — интернет-сервис помощи студентам
Прошу помочь с написанием кода на Python используя модуль tkinter.
Вот собственно задание:
Продемонстрировать движение двух кругов разных радиусов, катящихся на встречу по внешней/внутренней стороне заданного радиуса круга R .
Остановить движение кругов в момент прикосновения.

Я реализовал движение двух кругов, а вот как реализовать их остановку не знаю
Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import math
from tkinter import Canvas, Tk
 
SIZE = 600
WIDTH = SIZE
HEIGHT = SIZE
RADIUS4 = SIZE / 5
RADIUS1 = SIZE / 2.85
#radius orbiti
RADIUS2 = SIZE / 12
#radius pervogo kruga
RADIUS3 = SIZE / 15
#radius vtorogo kruga
 
def coords(angle):
    x = math.cos(angle) * RADIUS1
    y = math.sin(angle) * RADIUS1
    return x - RADIUS2 + SIZE / 2, y - RADIUS2 + SIZE / 2, x + RADIUS2 + SIZE / 2, y + RADIUS2 + SIZE / 2
 
def coords_1(angle):
    x = math.cos(angle) * RADIUS4
    y = math.sin(angle) * RADIUS4
    return x - RADIUS3 + SIZE / 2, y - RADIUS3 + SIZE / 2, x + RADIUS3 + SIZE / 2, y + RADIUS3 + SIZE / 2
 
def motion(angle):
    angle = angle + 0.1
    c.coords(f, coords(angle))
    root.after(50, lambda: motion(angle))
 
def motion_1(angle):
    angle = angle - 0.1
    c.coords(f1, coords_1(angle))
    root.after(50, lambda: motion_1(angle))
 
angle = 0
root = Tk()
c = Canvas(root, width=WIDTH, height=HEIGHT, bg="white")
c.pack()
#c.create_oval(SIZE / 2 - RADIUS1, SIZE / 2 - RADIUS1, SIZE / 2 + RADIUS1, SIZE / 2 + RADIUS1)
# #орбита окружности
#c.create_oval(SIZE / 2 - RADIUS4, SIZE / 2 - RADIUS4, SIZE / 2 + RADIUS4, SIZE / 2 + RADIUS4)
# #орбита окружности 2
c.create_oval(SIZE / 2 - 160, SIZE / 2 - 160, SIZE / 2 + 160, SIZE / 2 + 160)
#орбита окружности 3
f = c.create_oval(coords(angle), fill='black')
f1 = c.create_oval(coords(angle), fill='green')
root.after(100, motion(angle))
root.after(100, motion_1(angle))
root.mainloop()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2022, 16:48
Ответы с готовыми решениями:

Как остановить передвижение объекта при столкновении с другим объектом
Как остановить передвижение объекта при столкновении с другим объектом при движении вправо, влево Код передвижения вправо (первый...

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

Создать два объекта в графическом режиме. Объекты должны двигаться и при столкновении поменять цвет и форму
Создать любой(круг,квадрат) два объекта в графическом режиме. Объекты должны двигаться и при столкновении поменять цвет и форму. В объектах...

1
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
15.02.2022, 19:51
Похоже тут не качение а движение центров малых окружностей по окружности, это фейк а не перекат.
Цитата Сообщение от Maksim Lavrov Посмотреть сообщение
катящихся на встречу по внешней/внутренней стороне заданного радиуса круга R .
Добавит отрезок из центра как тут
https://ru.wikipedia.org/wiki/Эпициклоида
https://ru.wikipedia.org/wiki/Гипоциклоида

Цитата Сообщение от Maksim Lavrov Посмотреть сообщение
Остановить движение кругов в момент прикосновения.
Начать с финального кадра касания и посчитать анимацию в другую сторону разбег окружностей, а проиграть наоборот что сближаются.

Т.к. иначе тут похоже будет численный минимум поиск времени касания.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2022, 19:51
Помогаю со студенческими работами здесь

Создать два объекта в графическом режиме. Объекты должны двигаться и при столкновении поменять цвет и форму
любой обьект пример:первый круг а второй триуголник после столькновение на любой свет и форму менятся нужно. обьекты должны двигаться...

Как воспроизвести анимацию при столкновении
Всем привет. Недавно сел за изучение Unity. Столкнулся с проблемой, ника не могу разобраться, как сделать анимацию взрыва при столкновении...

Как свалить дерево при столкновении?
Всем привет! Есть к примеру дерево. Едет машина и происходит столкновение. Как свалить дерево при столкновении?

Построить два круга произвольного радиуса R и 2R и найти площадь этого круга, с помощью квадратов
Нужно построить два круга произвольного радиуса R и 2R (уже есть) и найти площади этого круга, с помощью квадратов произвольной стороны L...

Как вывести ошибку при столкновении объектов
Мне надо вывести ошибку. Например у меня есть 2 снежинки они летают по экрану и если они столкнутся(я знаю координаты их столкновения) они...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru