• Почему ближайшие точки определяются неправильно?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Есть еще вот такое решение. Выводится так: задаем обе прямые параметрически (точка + t или u, помноженная на вектор вдоль прямой). Получаем выражение для квадрата расстояния между точками как функцию от t и u. Ищем ее минимум, приравняв к 0 частичные производные. Там получаются 2 линейных уравнения.

    Vector3 a = axis2.first - axis1.first;
    Vector3 v1 = axis1.second - axis1.first;
    Vector3 v2 = axis2.second - axis2.first;
    float v11 = Vector3::DotProduct(v1, v1);
    float v12 = Vector3::DotProduct(v1, v2);
    float v22 = Vector3::DotProduct(v2, v2);
    float av1 = Vector3::DotProduct(a, v1);
    float av2 = Vector3::DotProduct(a, v2);
    // Решаем систему методом Крамера:
    // t*v11-u*v12=av1
    // t*v12-u*v22=av2
    float d1 = -av1*v22+v12*av2;
    float d2 = v11*av2-v22*av1;
    float d = -v11*v22+v12*v12;
    float t = d1/d;
    float u = d2/d;
    point1 = axis1.first + v1 * t;
    point2 = axis2.first + v2 * u;
    Ответ написан
    Комментировать
  • Как отследить причину краша в winforms?

    см. что предлагается здесь
    Ответ написан
    Комментировать
  • Как отследить причину краша в winforms?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Запусти две Visual Studio. В одной проект, а вторую пустую. Затем пустой средой подключись отладчиком к среде с проектом и сделай так, чтоб крашнулась. Авось исключение покажется.
    Ответ написан
    Комментировать
  • Как в игровых движках реализованы отскоки?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Если вместо синусов и косинусов использовать вектора, то формулы будут сильно проще. Все изменения происходят вдоль нормали соприкосновения. А там одномерная формула вообще: проецируете скорости на нормаль, потом считаете коэффициенты изменений одной и другой скорости, чтобы сохранился импульс и энергия. Потом прибавляете вектора изменений к векторам скоростей. Вместо синусов/косинусов считаете векторное/скалярное произведение векторов.

    В движках чаще всего проверяются коллизии - если 2 коллайдера (фигуры, описывающие тело, часто упрощенные) пересекаются, то находится нормаль соприкосновения, и применяются веторные формулы для изменения скорости.
    Ответ написан
    5 комментариев
  • Какой алгоритм лучше для коллизий, GJK + EPA или SAT?

    neuotq
    @neuotq
    Прокрастинация
    Сам не гейм прогер и тп. Но один раз в одном проекте косвенно сталкивался с необходимость. решения проблемы расчётов коллизий, был сторонний спец. Он говорил просто SAT хорошо по умолчанию, если не нужно/хватает простых коллизий, легкий не нужно особо морочиться. А вот если в коллизиях твоя фишка, сложная геометрия и прочее, тогда можно играться и с другими. Ну и выходит по умолчанию людям почти всегда достаточно обычных коллизий(условно обычных), вот и стоит SAT.
    Ответ написан
    Комментировать
  • Как построить одинаковый отрезок вне зависимости от порядка точек?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А в чём проблема то? Отсортируйте отрезки по координатам.
    если xA > xB
      или (xA == xB и yA > yB)
      или (xA == xB и yA == yB и zA > zB)
        то T := A, A := B, B := T
    Ответ написан
  • Как сделать воспроизводство рандомного звука в рандомный момент?

    freeExec
    @freeExec
    Участник OpenStreetMap
    UnityEngine.Random.Range
    Сначала для времени, потом для аудиофайла
    Ответ написан
    Комментировать
  • Как реализовать УЗ(ультразвуковой) датчик расстояния в Unity?

    GavriKos
    @GavriKos Куратор тега Unity
    Вопрос максимально непонятный, если честно.
    Расстояние между объектами вычисляется элементарно через Magnitude векторов. Ну или по координатам.

    Получить все объекты в определенном секторе (угол обзора и есть сектор) можно тоже как геометрически (принадлежность точки сектору) так и рейкастом с шагом.
    Ответ написан
    1 комментарий
  • Как навсегда отключить злоумышленника от моего компьютера?

    Варианты:
    1. Отключить компьютер от сети интернет.
    2. Если компьютер подключен через роутер, включить на нем firewall.
    3. Проверить компьютер на вирусы, например с помощь KVRT
    4. Удалить программы удаленного доступа к компьютеру, например Remote Administrator, TeamViewer (если они есть). Или удалить все программы, которые вам кажутся подозрительными.
    5. Переустановить Windows.
    Ответ написан
    Комментировать
  • Почему возникает Unresolved external symbol?

    Укажите полный путь к lib файлу, убедитесь, что по этому пути лежит ваш lib файл.
    Ответ написан
    3 комментария
  • Почему максимальный размер объекта std::string равен 4611686018427387897?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Ну вот просто создатели библиотеки захардкодили именно это число.
    Эта конструкция возвращает разные значения, в зависимости от компилятора, разрядности, опреационной системы.

    Это 2^62-7. Почему 2^62? Может, в силу каких-то причин в вашей системе нельзя адресовать больше 62 бит. Может, система 2 бита для чего-то использует. Почему -7? Надо еще где-то хранить длину, надо оставить место для нулевого символа в конце и надо оставить нетронутым индекс std::string::npos - это значение используется для обозначения "несуществующего индекса". Конкретное значение зависит от того, что там программисты стандартной библиотеки сделали.

    В любом случае, это значение на много-много порядков больше любой практически возможной длины строки. Ну не сможете вы выделить 4 экзобайта памяти.
    Ответ написан
    Комментировать