Ответы пользователя по тегу Математика
  • Требуемый "бэкграунд" для прохождения Сканави?

    x67
    @x67
    Почему просто не взять учебники по алгебре и геометрии за 7-9 классы? Там и теория и задачи и решебники, если вдруг что то пойдет не так.
    В сознательном возрасте они изучаются очень быстро
    Ответ написан
    Комментировать
  • Почему в единицах измерения информации, всегда есть хвостик 24?

    x67
    @x67
    Не всегда, иногда бывает 00,48,72,96,28,56,80....
    Ответ написан
    Комментировать
  • Как вычислить +- 500 м от координат [55.862525,37.537452]?

    x67
    @x67
    1. Отсюда берем мат.аппарат https://www.movable-type.co.uk/scripts/latlong.html
    2. Правильно ставим задачу
    2.1 если есть набор точек, среди которых надо выбрать те, что удовлетворяют условию, то прямо копируете/переписываете код оттуда и проверяете для каждой пары точек.
    2.2 если точек нет, но надо получить массив точек, который может удовлетворять условию, то конкретизируйте задачу.
    Ответ написан
    Комментировать
  • Как реализовать формулу в matlab?

    x67
    @x67
    Мы тут не предсказатели, так что выкладывайте код.
    --
    Вероятнее всего вы пытаетесь произвести скалярную операцию над массивом, что невозможно. Но можно произвести эту операцию над всеми элементами массива, для этого перед оператором поставьте точку, такие оперции называются "element wise operations", вот пример элементарного умножения
    Ответ написан
    Комментировать
  • Пересечение двух линии в 3D?

    x67
    @x67
    уравнение прямой выглядит так:
    ax+by+cz=r,
    где a,b,c,r - константы
    Первым делом находишь коэффициенты для каждой линии. Это можно сделать, подставив известные точки и решив систему уравнений:
    {ax1+by1+cz1=r, ax2+by2+cz2=r} (тут неизвестны величины a,b,c,r)
    Повторяешь тоже самое для второй линии
    Теперь имея уравнение для каждой прямой, решаешь их общую систему уравнений
    {a1x+b1y+c1z=r, a2x+b2y+c2z=r} (тут неизвестными являются x,y,z - точка пересечения)
    Стоит добавить, что линии могут не пересекаться или иметь бесконечное число пересечений - это надо учесть и проверить.
    Упростить решение можно используя векторное представление и соответствующие библиотеки, но это уже ищи сам. Вот тут разжевано мат. описание прямой в векторном виде. На инглише, но это не страшно, все по картинкам можно понять.
    Ответ написан
  • Как разбить массив на определённые доли?

    x67
    @x67
    Случайные числа хороши на больших выборках, на малых распределение может быть немного неожиданным. Используйте счетчик и делите на четные/нечетные запросы. При увеличении количества долей считайте остаток от деления текущего значения счетчика на количество долей. Если нужна балансировка нагрузки, то такие методы (в т.ч. ГПСЧ) хороши при примерно равных по сложности запросах. Если запросы могут быть разной сложности, оценивайте по состоянию долей или по параметрам запроса. Почему не стоит использовать ГПСЧ, так потому что в пределе вы тратите энергию на генерацию случайных чисел, которые по сути то и не нужны.
    Ответ написан
    Комментировать
  • Какими формулами можно описать движение предмета?

    x67
    @x67
    У предмета есть вектор скорости и вектор ускорения. Также есть одна угловая скорость (на плоскости) и одно угловое ускорение.
    Собственно разберем простой случай, когда при свайпе предмет мгновенно достигает нужной скорости и нужной частоты вращения.
    Тогда можно аппроксимировать свайп в линию (запросы: линейная фильтрация, тренд по точкам, линейная интерполяция и тп). Возможно подойдет просто взять начальную и конечную точку, попробуйте. Тогда у предмета скорость по оси Х будет равна (x2-x1)*К/(t2-t1), где 1 и 2 - точки начала и конца свайпа, а К - какой-то коэффициент, который будет вам удобен. А по оси Y соответственно (y2-y1)*K/(t2-t1).
    Закрутку считать так. Берете начальную и конечную точки свайпа, получаете из них линию, далее ищите самую далекую точку от линии (или для простоты ищите расстояние средней точки до линии). Угловая скорость будет пропорциональна этому расстоянию.
    Как сделать так, чтобы предметы ускорялись плавно?
    Во первых надо запомнить, что ускорение не должно быть постоянным, должна быть какая-то инфляция его во времени. Причем быстрая. Далее нужно решить, есть ли у предметов разная масса (насколько физична игра?) Если нету, то мы работаем напрямую с ускорением, если есть, то появится еще сила, воздействующая на предмет. Предположим массы нет, тогда можно сделать простое ускорение, равное какому-то числу. Конечную скорость считаем также, но при этом не сразу присваиваем скорость, а постепенно изменяем по следующей формуле:Vx=Vx+ax*dt. dt - интервал между фреймами (для девайсов с переменным фпс, чтобы игра не скакала,) ах - ускорение по оси х. При достижении скорости ускорение становится равным нулю.
    Еще один вариант плавного разгона - Vx=K*Vx+(1-K)*Vxzad, где К может быть в интервале от 0 до 1, а Vxzad - расчетная скорость, которой надо достичь. Чем больше К, тем медленнее будет ускоряться предмет. Если надо, эту формулу можно написать немного в другом виде, тогда с ней будет приятнее работать (можно будет легко задавать, за какое время предмет будет достигать своей скорости).
    Для угловой скорости все это работает точно также.
    Ну и да, в принципе можно обойтись без ускорения или сил с массой, задавая скорость алгоритмически, но с ускорением удобно будет вводить разные эффекты вроде гравитации, трения и тп.
    Ответ написан
    8 комментариев
  • Перемножение полиномов?

    x67
    @x67
    (a1+a2+...+an)*(b1+b2+...+bm)=b1*(a1+...+an)+b2*(a1+...+an)+...+bm*(a1+...+an)

    в полиноме an=kn*x^n, к примеру, тогда:
    bm*an=kbm*kan*x^(n+m) - это простейшая ячейка операции, так сказать. bm*(a1+...+an) состоит из n таких ячеек, а их сумма будет ячейкой второго уровня. Ячеек второго уровня будет m штук, а их сумма - ваш результат, назовем его ячейкой третьего уровня. Собственно вам надо инкрементально считать ячейку второго уровня, после чего инкрементально же ее прибавлять к ячейке третьего уровня. Тогда предел необходимой памяти будет стремиться не к m*n+с, а к с, где с - константа
    Ответ написан
  • Как определить возможное следуещее число?

    x67
    @x67
    Для каждого из возможных чисел считаете количество полученных чисел, возьму пример проще - мы получаем только 0 или 1,
    тогда после cnt=10 попыток может получиться такая таблица:
    x(0):6 - количество полученных ноликов
    x(1):4 - количество полученных единичек
    далее получаем вероятности того, что:
    выпадет 0: P(0)=1-x(0)/cnt = 0.4
    выпадет 1: P(1)=1-x(1)/cnt = 0.6

    Однако замечу, что это гадание на кофейной гуще и не дает высокой точности, а при сколько нибудь значимой выборке вероятность выпадения любого из чисел будет стремиться к 1/(количество чисел). Да и работает такой алгоритм только для равномерного распределения.
    Ответ написан
    8 комментариев
  • Что это за координаты?

    x67
    @x67
    Там может быть все что угодно, от углов до скоростей или обычного мусора. Воспринимайте более абстрактно, просто как объект с 6 параметрами, где первые два параметра - координаты этого объекта по осям Х и Y. Тут вопрос скорее к вам - откуда вы получаете p-объекты (которые скорее всего просто точки, судя по вашим комментам) и зачем вы их получаете? Там и будут необходимые вам ответы.
    Ии.. я не спец по js, но нормально ли то, что r - внешняя переменная для функции, однако вы ей что-то там присваиваете внутри функции? В большинстве языков такая конструкция или не сработает или называется костылем, который через n циклов разработки выстрелит вам в ногу
    Ответ написан
    Комментировать
  • Можно ли изображение обратимо разложить на несколько, с изменением пространственной частоты?

    x67
    @x67
    Если я правильно понял, вам скорее поможет кластеризация с ограничением размеров кластеров - аналог того преобразования, но без работы над данными. При размытии неизбежно теряется информация, это необратимый процесс.
    Ответ написан
  • Как вычислить объём выпуклой фигуры заданной точками?

    x67
    @x67
    Если не нужна высокая точность или нужно красивое решение, можно использовать метод Монте Карло. Для этого нужно знать, находится ли точка внутри фигуры или нет. Вот первая ссылка про это А вот про Монте Карло
    Есть еще способ - численное интегрирование. Если вы знаете как просто получить проекцию разреза фигуры в любом месте на плоскость, то тут тоже ничего сложного нет.
    Ответ написан
    Комментировать
  • Как разделить поток значений в процентном соотношении?

    x67
    @x67
    Детерменированный метод - точность до константы:
    Пусть, вероятность попадания - 40%, 30%, 30%. Пришло сообщение на распределитель, у него есть персональный номер (внутри распределителя по крайней мере), если остаток от деления на 10 меньше или равен 3, он идет в первый поток., от 4 до 7 - второй поток, от 7 до 9 - в третий. Нужна точность вплоть до процента? Делим номер на 100, а не на 10, ну и тд. Нужна высокая точность и более равномерная загрузка? Легко, A+B+C=100%, выражаем вероятности B и C через А и некую дельту вот так А+(А+d1)+(A+d2)=100%, Предположим у нас те же 10 сообщений. Сначала d1 сообщений пойдет в поток 2, потом по очереди по А сообщений пойдет в каждый поток по порядку и наконец d2 сообщений пойдет в поток 3. И счет начинается сначала. Можно еще больше оптимизировать, но это уже сами додумывайте или нанимайте человека, который потратит на это время за ваши деньги.
    Стохастический метод:
    Наиболее интересный, на мой взгляд, но точность его при малом количестве сообщений будет очень низкой. Берем генератор равномерного псевдорандома и превращаем его в генератор заданной вероятности (если сами не додумаете как, на тостере этот вопрос неоднократно задавался, да и наверняка есть готовыые библиотеки), задаем вероятности и при каждом новом сообщении "бросаем кости". Куда генератор укажет, туда сообщение и попадет. Проблем с загрузкой каналов при большом количестве сообщений у него нет.
    Ответ написан
    2 комментария
  • Возможно ли стать олимпиадником с нуля?

    x67
    @x67
    я стал победителем гос. олимпиады по информатике с нуля(правда в отличном от вашего гос-ве), при том что информатика не преподавалась совсем, а противники были достаточно хорошо подготовлены. Так в чем же дело? естественно без мозгов результата не добиться, но главным было желание. Я действительно хотел изучить программирование и целенаправленно шел к этому, чего и вам советую. Определитесь с предметом - важно, что бы он был интересен и был проходным для интересующих вас специальностей в желаемых вузах и начните изучать. Как только поймете, что вы полностью освоили школьный курс своего уровня, ищите преподавателей, которые помогут вам в изучении предмета на уровне олимпиадника, ищите информацию в интернете, решайте задачи с предыдущих олимпиад, придумайте себе похожие.
    К слову я этим всем не занимался, просто кодил. И выехать мне удалось только на хорошем знании математики и эрудированности что-ли - просто повезло знать те вещи, которые там пригодились.
    Книжки, все остальное не является чем-то принципиальным. Одни вещи могут быть понятнее и интереснее изложены в одной книге, другие - в другой, поэтому читайте все, что найдете.
    Ответ написан
    Комментировать
  • Как найти положение точки относительно плоскости?

    x67
    @x67
    умножение на -1 равносильно перевороту плоскости. Над твоей головой летает муха, а теперь умножь себя на -1 (или улетай в Австралию), ты перевернешься и муха уже будет под ногами.
    Ответ написан
  • Какие книги и учебники можете посоветовать для углубленного изучения?

    x67
    @x67
    Вот пожалуйста. Тут целый сборник рекомендаций книг для самых различных ситуаций.. Также наверху есть поле для ввода текста, туда можно вводить всякие запросы
    Ответ написан
    Комментировать
  • Как быстро определить что множество содержит все натуральные числа от N до M?

    x67
    @x67
    тут в первую очередь надо определиться со структурой данных. Массив? надо сортировать. Огромный массив - надо долго сортировать.
    А так как множество натуральных чисел, пусть будет массив bool значений, при том индекс элемента массива - натуральное число, а значение элемента - его наличие в множестве. В таком случае нам все равно придется перебрать m-n значений, но не надо будет ничего сортировать, да и реализовано может быть прямо ассемблерной вставочкой, что должно существенно ускорить код.
    Другой вариант если мы все таки не хотим перебирать - создать сложную структуру, в которой множество меняется путем добавления или удаления "островов" натуральных чисел или островов их отсутствия.
    В таком случае предположим у нас есть множество 0-inf(1-inf, если вы натуральный нулененавистник). Пусть мы убрали из него числа 4 и 5, тогда добавим в структуру остров [4:5]. Убрали еще числа 7-1110, также добавляем выколотый остров 7:1110. Добавили 666, значит или делим остров или добавляем остров другого типа(в зависимости от реализации). Когда множество будет готово,нужно будет сравнить его со всеми островами и в зависимости от их типа, если M,N принадлежит острову натуральных чисел или между M и N отсутствуют выколотые острова, мы делаем вывод о том, содержит ли множество все эти числа. Теоретически такой подход выигрышен при стремлении размерности множества к бесконечности и при конечном количестве островов. На практике, я бы блеснул этими решениями на собеседовании и больше никогда не возвращался бы к таким задачам)
    Ответ написан
    Комментировать
  • Как проверить, пересекаются ли треугольники?

    x67
    @x67
    1. Получаете уравнения прямой для каждой из сторон каждого треугольника (y=kx+b и cоответствующее уравнение x=(y-b)/k)
    обоснование решения: аксиома 1. При пересечении фигур, хотя бы одна вершина одной из фигур будет лежать на другой фигуре.
    Далее при чтении см. Рисунок
    2. Поочередно подставляете каждую координату каждой из вершин в получившиеся уравнения, красной линией показана геометрическая интерпретация подстановки X синей точки(предполагаемой вершины треугольника). При этом мы подставляем Х синей точки только в уравнения тех линий, у которых этот Х тоже присутствует. Геом. интерпретация - коричневые линии. То есть Х синей точки вне диапазона правой серой линии по Х, потому мы эту линию не проверяем.
    Когда будем подставлять У, мы не будем проверять нижнюю линию по этой же причине.
    Чтобы вершина, находилась внутри треугольника, вторая координата синей точки должна быть внутри интервала, полученного из уравнений (геом. интерпретация - зеленые линии - тот самый интервал, внутри которого должен быть Y синей точки).
    Таким образом, если хоть одна из вершин проходит проверку и по Х и по У, она находится внутри или на поверхности другого треугольника и треугольники пересекаются.
    2b72aec4ed0c4dbe87107299ed3ba213.png

    Если не совсем понятно, спрашивайте. А вообще лучше бы вам найти готовый велосипед и не парить себе мозги.
    Ответ написан
  • Какой шаблон можно придумать для матанкапчи?

    x67
    @x67
    криволинейный тройной интеграл по замкнутому контуру
    Ответ написан
    Комментировать