• Как определить коллизию квадратов?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Вот тут программисту и нужна математика (совсем чуть чуть).

    Квадрат - это все точки (X, Y), которые удовлетворяют неравенствам:
    x1 <= X <= x1 + w1
    y1 <= Y <= y1 + w1


    Пересечение двух квадратов - это точки, которые удовлетворяют одновременно каждой паре неравенств, т.е. удовлетворяют сразу четырем неравенствам:
    x1 <= X <= x1 + w1
    y1 <= Y <= y1 + w1
    x2 <= X <= x2 + w2
    y2 <= Y <= y2 + w2


    Тут уже видно, что фактически есть пара неравенств на X, и есть пара неравенств на Y. Они независимые. Вот и получается, что пересечение можно искать отдельно по каждой оси.

    Рассмотрим одну пару:
    x1 <= X <= x1 + w1
    x2 <= X <= x2 + w2


    Вообще, такие системы неравнеств решают в школе, классе этак в 7.

    Сконцентрируемся на левых границах. Что значит, что X >= x1 и X >= x2? Это значит, что X больше обоих чисел x1 и x2. Это можно записать одним неравнеством - X больше максимума из двух чисел:
    max(x1, x2) <= X

    Так же и по правым границам:
    X <= min(x1 + w1, x2 + w2)

    В итоге:
    max(x1, x2) <= X <= min(x1 + w1, x2 + w2)

    Эти неравенства имеют решение, если левая граница не превосходит правой:
    max(x1, x2) <= min(x1 + w1, x2 + w2)

    Вот у вас условие, что по оси OX есть хоть одна точка пересечения. Если вам касающиеся квадраты не надо считать пересекающимеся, то замените знак <= на строгое неравенство.

    Точно также проверьте, что есть пересечение по OY. Если пересечение есть и там и там, то квадраты пересекаются. Т.е. весь ваш код должен найти 2 минимума, 2 максимума, сделать 2 сравнения и соединить их через логичиское И.
    Ответ написан
    5 комментариев
  • Почему аватары в YouTube то появляются, то исчезают?

    почему они тогда иногда появляются?
    Потому что YouTube хостится не на одной машине под столом у сисадмина, а на тысячах серверов, распределённых по всему миру. А РКН блокирует диапазоны IP.
    Ответ написан
    Комментировать
  • Как выбрать наибольшие значения из списка массивов и вывести их?

    0xD34F
    @0xD34F
    sorted(arr, key=lambda n: n[2])[-3:]
    Ответ написан
    Комментировать
  • Как записать в список?

    Vindicar
    @Vindicar
    RTFM!
    Сделать глобальный словарь списков, ключом словаря сделай id пользователя.
    Когда надоест мучаться с перезапусками, переделаешь на БД.
    Ответ написан
    Комментировать
  • Почему не стоит использовать f строки в SQL Python запросах?

    ma4akk
    @ma4akk
    Использование f строки в SQL запросах может быть небезопасно, потому что оно позволяет вставлять значения переменных непосредственно в SQL запрос. Это может привести к SQL injection - атаке, когда злоумышленник вводит в запрос подозрительные данные, чтобы получить доступ к базе данных или внести в нее изменения.

    Чтобы избежать этой проблемы, рекомендуется использовать параметризированные запросы. Это значит, что значения переменных не вставляются непосредственно в запрос, а передаются отдельно как параметры. В SQLite это можно сделать с помощью вопросительного знака (?) вместо значения переменной:

    connect = sqlite3.connect('INFO.db')
    cursor = connect.cursor()
    
    GLAV_USER = message.from_user.id
    cursor.execute("SELECT ID FROM table WHERE MEMBER = ?", (GLAV_USER,))


    Такой подход более безопасен и предотвращает возможность SQL инъекцй.
    Ответ написан
    2 комментария
  • Почему в random.choice() ошибка?

    ZIK1337
    @ZIK1337
    странно видеть такой вопрос
    потому что этот метод принимает на вход последовательность, а не мапу
    Ответ написан
    Комментировать
  • Как вставить переменную в кавычки?

    Lord_of_Rings
    @Lord_of_Rings
    Python developer
    text = bytes(write_text)
    Ответ написан
    Комментировать
  • Как вставить строку на индекс, вне зависимости от того существует он или нет?

    Vindicar
    @Vindicar
    RTFM!
    l[2:] = ['Test']
    Для двух-трёх строк сработает.
    Ответ написан
    Комментировать
  • Как правильно решить задачу, используя формулу комбинаторики?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Размещение тут не лучшая идея, потому что придется перебирать, сколько же двоек будет в пути.

    Тут вообще-то ответ - числа фиббоначи. Подумайте, почему.
    Ответ написан
    Комментировать