Определить время соприкосновения облаков — в чем ошибка?

265bed0c916747aea8fccff3d3502d95.JPG
Вот код, где половина решина математически, но время выдается неправильно:
from turtle import *
x1, y1, r1, v1 = 32, 34, 3, 3
x2, y2, r2, v2 = -13, 34, 1, 3
t = 0
up()
goto(x1,y1)
a = distance(x2,y2)  #Нахожу дистанцию от центра до центра
done()
t = 0
n = 0
while n == 0:
    if r1 + r2 < a:
       r1 += v1 * t
       r2 += v1 * t
       t += 0.00001
    else
        n = 1

print(t)

Можно по-любому решить полностью графически, но нигде не могу найти функции определяющей, что фигуры пересеклись)
t = 0
while False:
    speed(100)
    r1 += v1 * t
    r2 += v2 * t
    up()
    goto(x1,y1)
    down()
    color('#9E9456')
    begin_fill()
    circle(r1)
    end_fill()
    up()
    goto(x2,y2)
    down()
    begin_fill()
    color('#829551')
    circle(r2)
    end_fill()
    t += 0.00001
    if :     #Вставить бы сюда функцию и все
        break

вот так вот(
  • Вопрос задан
  • 2425 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Расстояние между центрами:
d = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
Момент соприкосновения:
r1+v1*t+r2+v2*t = d
Отсюда:
t = (d-r1-r2)/(v1+v2)
Подставляем данные, получаем
d = 45; t = 41/6 = 6.8(3)
И не надо никакой графики.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Тут
два круга:
Если расстояние между центрами меньше суммы радиусов:
if (sqrt((x2-x1)^2+(y2-y1)^2)<(r1+r2)) тогда пересеклись.
Ответ написан
Комментировать
Va1ery
@Va1ery
Из уважения к отвечающим, хотя бы картинку поверните
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы