Ответы пользователя по тегу Математика
  • Почему неправильно определяется угол наклона прямой?

    @Karpion
    Мне кажется, Яндекс.Карты используют такую проекцию, чтобы отображаемый участок не искажался.
    Ответ написан
    Комментировать
  • Как найти точку на расстоянии d от прямой?

    @Karpion
    У Вас ошибка в постановке задачи. Огибающая - это не ломанная (набор отрезков), а более сложная линия.
    Когда огибающая идёт вдоль прямого участка - она будет тоже прямая. А вот при огибании вершины - будет окружность.

    Рассмотрим первый отрезок. Пусть он задан точками начала {x0,y0} и конца {x1,y1}.
    Посчитаем вектор этого отрезка v={(x1-x0),(y1-y0)}.
    Посчитаем нормаль к нему n={(y1-y0),(x0-x1)} - меняем координаты местами, у одной из координат меняем знак.
    Нормализуем нормаль, т.е. вычисляем длину нормали (Пифагор подсказывает) и потом делим каждую компоненту на длину. Т.е. нормаль оказывается единичной длины.
    Умножаем нормаль (каждую компоненту) на длину жёлтого отрезка.

    Теперь прибавим эту нормаль к первой точке {x0,y0} и потом ко второй точке {x1,y1}. Получим концы первого синего отрезка.
    Одна беда - синие отрезки, полученные таким образом, будут равны исходным, и поэтому не состыковываются.
    Для того, чтобы их состыковать - надо искать пересечения прямых. По идее - ничего сложного нет.
    Ответ написан
    Комментировать
  • Как определить наличие точки внутри полигона?

    @Karpion
    Проведём из нашей точки прямые линии ко всем вершинам полигона. Теперь пойдём по всем вершинам полигона по очереди.
    Если точка внутри полигона - то мы сделаем полный круг. Если снаружи - то пойдём сначала вправо, потом влево (ну или наоборот) и так вернёмся обратно, не описав круга.

    В общем случае - количество оборотов вокруг внутренней точки будет нечётным: ...,-3,-1,1,3,...
    А если точка снаружи - то число оборотов будет чётным: -4,-2,0,2,4,...

    Там надо будет суммировать углы. Лучше всего вычислить синус угла - через векторное произведение векторов и взять от него арксинус: при этом чётко определяется и знак угла. При суммировании плавающих числе могут накапливаться ошибки.
    Ответ написан
    Комментировать
  • С чего начать учить математику?

    @Karpion
    Начать надо с определения уровня своих знаний. Как советовали выше - желательно найти учителя для встреч iRL.

    Кроме того, надо пробовать разные книги - ибо не все книги одинаково полезны.

    Надо знать элементарные функции - тригонометрию, экспоненту, логарифм.
    Дифференцирование и интегрирование.
    Линейную алгебру.
    Векторную алгебру, аналитическую геометрию.

    А вообще - зависит от предметной области.

    PS: "Математика убивает креативность." (C) Фурсенко.
    "Не нужны нам математические школы. По-моему, это пережиток прошлого." (C) Герман Греф.
    Ответ написан
    Комментировать
  • Как найти линейное преобразование плоскости?

    @Karpion
    У Вас в задаче заложен ответ!

    Пусть координаты точек первой картинки = P[i], второй = V[i] (каждая координата = вектор с двумя значениями).

    Далее надо записать линейное преобразование:
    P[i] -> A + B*P[i]
    (A и B тоже имеют по две компоненты; A = вообще нормальный обычный вектор).

    Ищем разницу, возводим в квадрат:
    (A + B*P[i] - V[i])^2
    суммируем это по i (по всем точкам).

    Теперь берём четыре частные производные по каждой компоненте A и B, приравниваем их к нулю. Получаем четыре линейных уравнения.
    Ну а решать линейные уравнения - должен уметь всякий.

    Upd1: Что такое "перспектива" - я не понял. Наклон фотоаппарата, что ли?
    Если B - это одна компонента, то алгоритм остаётся прежний.

    Upd2: Если надо учитывать ещё и возможность поворота на определённый угол - будет сложнее; но преобразование всё равно линейное.
    Ответ написан
  • Как найти все целочисленные точки отрезка?

    @Karpion
    Допустим, x1, y1, x2, y2 - целые.
    Пусть x1=y1=0 (достигается: x2=-x1; y2=-y1;).

    Ищем k=НОД(x2,y2) (там по ссылке есть алгоритмы).

    Делим x2 и y2 на к - это координаты первой точки.
    Умножаем координаты первой точки на 2,...,(k-1) - получаем все остальные точки (конечные точки и первая точка считаются уже найденными, их не выводим; если надо все - то ряд будет 0,1,...,k).
    Ответ написан
    Комментировать