• Что читать про ресайз изображений?

    @tomatho
    Мне не хватает некоторых подробностей в вопросе.
    Всё же важнее "зачем" а не "что".
    Если вы хотите просто реализовать несколько разных методов ресайзов - открываете любой редактор который вам больше нравится, и смотрите список возможных методов ресайза.
    Читаете про них где-нибудь, например в той же Википедии, и реализуете их.

    Если же вы хотите понимать обработку изображений, то вам придётся черпнуть фундамент, и это будет тяжко.
    Придётся узнать о цветовых пространствах, о сэмплировании, о восприятии человеком света,
    и о ещё много много другом.
    Например качество результата можно определять по разному, но современный подход основывается на человеческом восприятии, и об этом можно наверно почитать в описании того как устроен JPEG, ведь он умеет сохранять в разном качестве. При высоком качестве он меньше "съедает" детали, чем при низком.
    Аналогичный теоретический подход в H.264 который используется в MP4.

    Почему я упомянул про сэмплирование, которое используется в звуке?
    Потому что изображение на самом деле просто сэмплированная версия непрерывной как бы двумерной волны, и каждый пиксель - это некоторая величина отклонения в позиции двумерной сетки.
    Следовательно теория волн (в том числе звуковых) вполне может использоваться и здесь.
    Собственно это то, что и делает Lanczos: использует метод resample звука на изображении, просто адаптированный под изображения.
    (Процесс resample звука это перевод из 44100 Hz например в 48000 Hz.)
    Ответ написан
    Комментировать
  • С чего начать разработку игр без опыта программирования?

    @tomatho
    Самый правильный подход: решай проблемы по мере поступления.
    Но начинай с простого.

    Попытайся на Unity сделать что-то простое.
    Столкнулся с проблемой? Решай её!
    Не решай что-то сильно отстранённое.
    Набери знаний столько сколько достаточно для её решения.
    Не запоминай ничего лишнего - всё равно то что тебе не понадобилось сразу забудешь.

    Затем, повтори это много много раз, пока наконец...
    А вот и не правда. Без всяких "пока наконец...".
    Мастерству нет предела.
    Ответ написан
    Комментировать
  • Метод расчета орбит?

    @tomatho
    Метода Рунге-Кутты вполне достаточно должно быть.
    Можно использовать любой другой метод численного решения дифференциальных уравнений подходящий для такой задачи.

    1. Девайс не вывозит подобные вычисления

    Что за древний девайс? Или... Сколько у вас шагов, сколько требуемая точность?

    Ещё возможные проблемы: вы не правильно выписали уравнения, либо не правильно применяете метод Рунге-Кутты. Например, вместо радиуса в квадрате, в обычной форме уравнений должен быть радиус в кубе, а так как радиус вычисляется через корень, то получится корень в кубе.

    Эллипс можно посчитать только для двух тел. Для трёх тел там уже не эллипс.
    Эллипс / гиперболу / параболу по двум телам и их начальным условиям (позиция, скорость, масса) можно найти как посчитать на английской версии википедии на странице Kepler orbit.
    Но это уже зубодробительная геометрия. И сделать всё это правильно и точно - это задача не из лёгких. Я как-то хотел это проделать, потом плюнул. А ведь просто хотел добавить "прогнозируемую" траекторию тела во время его добавления в симуляцию.
    Если быть точнее, вот в эту: https://github.com/HermannBjorgvin/Gravity-Experiments

    Метод Рунге-Кутты может быть не только четвёртого порядка, но и выше. Чем выше порядок тем выше и точность.

    Точки Лагранжа можно найти и на эллипсах скорее всего, только там надо либо самому их найти, либо найти литературу где это описано.
    Ответ написан
    3 комментария
  • Какой смысл собственного вектора матрицы?

    @tomatho
    Для начала могли погуглить следующие термины:
    Собственный вектор
    Собственное число
    Характеристический многочлен
    Ниль слои
    Ниль пространства

    А если глубина не важна + нет проблем с английским, крутой плейлист (возможно не по теме)
    https://www.youtube.com/watch?v=kjBOesZCoqc&list=P...
    Ответ написан
    Комментировать
  • С++ Классы, нужно сравнить два объекта одного класса и вывести результат на экран, как это сделать?

    @tomatho
    Как? Решительно, стремительно!
    Если этот код писали вы - то не составит труда.
    Если это задание в курсе лекций - то я не намерен помогать изображать фальшивое понимание.
    Ответ написан
    3 комментария
  • В чем проблема с рендерингом(2d)?

    @tomatho
    В общем погуглил чутка. Нашел только следующее:
    • У одного это вызывало проблемы из-за системы частиц (он не указал конкретно, что именно) короче взрыв от пули жестко нагружал.
    • У другого это вызывала программа F.Lux.
      Поэтому он рекомендовал выключить её, и ей подобные.

    Больше гуглить лень. Можете попробовать отключить VSync, но штатно сам VSync не должен вызывать проблемы.
    Ответ написан
  • Функция Math.floor?

    @tomatho
    Предполагаю что язык JavaScript, хоть в тегах это не указано.
    Рассмотрим пример вызова getRandomInt(5, 10)
    Math.random() - случайное число [0, 1)
    И важно именно что 1 не включительно!
    (max - min + 1) - я бы назвал количеством вариантов = 6.

    Почему 6? Что значит это 6? Попробуем посчитать 6 чисел начиная с нуля, получим:
    0, 1, 2, 3, 4, 5
    Теперь для себя нужно подчеркнуть что это получилось [0, 5] включительно.
    То есть, в отрезке [0, 5] ровно 6 целых чисел.
    Это распространённое заблуждение новичков, что в таком отрезке 5 чисел.

    Теперь смотрим дальше. Вспоминаем что Math.random() возвращает [0, 1).
    Умножим как написано в формуле на 6, получим:
    [0, 6)
    Подчеркнём снова, что 6 не включительно. Запишем 6 как пять и девять в периоде:
    [0, 5.(9) )
    Мысленно разделим отрезок на диапазоны где Math.floor() (округление вниз) даёт одинаковые результаты:
    [0, 0.(9) ), [1, 1.(9) ), [2, 2.(9) ), [3, 3.(9) ), [4, 4.(9) ), [5, 5.(9) ).

    Вспомним, что Math.random() возвращает число в отрезке [0, 1) равновероятно,
    а это означает, что число в диапазоне [0, 0.(9) ) будет выбрано с той же вероятностью,
    что и в диапазоне [1, 1.(9) ) в силу "равности" длины отрезков.
    Math.floor() будет отображать числа из этих отрезков на числа:
    0, 1, 2, 3, 4, 5
    И в силу "равности" длины отрезков, эти числа получатся тоже равновероятно.

    Наконец осталось прибавить min как в формуле, получим
    0+5, 1+5, 2+5, 3+5, 4+5, 5+5
    Или
    5, 6, 7, 8, 9, 10

    Теперь надеюсь ясна вся подноготная.
    И следовательно ясно, что эта функция возвращает равновероятно целое число в отрезке [min, max].

    Один важный комментарий: так будет до тех пор, пока min, max - целые числа.
    Если это не так, тем не менее не составляет труда понять поведение функция проделав те же ходы выше.
    Ответ написан
    Комментировать
  • Как изучать алгоритмы?

    @tomatho
    Либо у вас совсем плохая фантазия, либо плохо поняли главу, либо школьную математику очень плохо знаете, либо автор вам соврал, что математика не требуется.
    Скорее всего последнее.

    Это называется профдеформация, и тут она заключается в том, что автору кажется математика простой и очевидной, потому он пишет, что особо математики не требуется.
    Ответ написан
  • Задача линейного программирования. Как добавить ограничение в модель?

    @tomatho
    Надо у либы просто из примера выписать получающиеся ограничения, чтобы понять.
    А ограничения там такие:
    brit * brit.plane    + yank * yank.plane  <= constraints.plane
    brit * brit.person   + yank * yank.person <= constraints.person
    brit * brit.cost     + yank * yank.cost   <= constraints.cost
    brit * brit.capacity + yank * yank.capacity -> максимизировать

    Затем смотрим на вашу систему:
    x1 * x1.r1 + x2 * x2.r1 + ... + xn * xn.r1 = constraints.r1
    x1 * x1.r2 + x2 * x2.r2 + ... + xn * xn.r2 = constraints.r2
    ...
    x1 * x1.rn + x2 * x2.rn + ... + xn * xn.rn = constraints.rn
    // и наконец!
    x1 * x1.one + x2 * x2.one + ... + xn * xn.one <= 1
    x1 * x1.one + x2 * x2.one + ... + xn * xn.one -> максимизировать

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

    @tomatho
    Для третьего и четвёртого варианта невозможно из компаратора узнать был ли уже на таком же расстоянии.
    Выход который я вижу: "сместить" в пользу "низа", но это возможно только с определённой точностью.
    Второй вариант: можно сделать если передавать в компаратор три значения: текущее, лучшее сейчас, и то что ищем.

    Далее код для a, b - текущее, то что ищем соответственно.
    Код не проверял.
    function c1(a, b) {
      return (a <= b ? b - a : Number.MAX_VALUE );
    }
    function c2(a, b) {
      return (a >= b ? a - b : Number.MAX_VALUE );
    }
    function c3(a, b) {
      if (a <= b && b - a < Math.abs(b)*(1e-7))
        return 0;
      return Math.abs(a - b + Math.abs(b)*(1e-7));
    }
    function c4(a, b) {
      if (a >= b && a - b < Math.abs(b)*(1e-7))
        return 0;
      return Math.abs(a - b - Math.abs(b)*(1e-7));
    }
    Ответ написан
  • Где взять готовые графические решения для разработки приложения на WinAPI?

    @tomatho
    WinAPI же не о GDI.
    Просто используйте стандартные элементы.
    Написание кастомных элементов всегда было попо-болью.

    Мне вот щас бы пригодился кастомный edit, но прогуглив целый день, я узнал, что "простых" решений нет, только написание с нуля.
    Ответ написан
    Комментировать
  • Как закрыть проблемы в математике/физике?

    @tomatho
    Математика и физика очень интересные, увлекательные вещи.
    Просто многие учителя видать так себя ведут что вызывают отталкивание от предмета вместо его объяснения.
    Есть замечательные видео по которым можно много чего интересного узнать, но они не научат вас практики решения задач.
    Возможный отрицательный эффект: на уроках станет скучно, так как всё, что учитель будет рассказывать - будет известно.

    Так было со мной. Я по своей дурости в 7-м классе прочитал учебник за 11-й. Последующие 5 лет были мукой. На математике сидеть было нереально. Ничего нового.
    Аналогично может случиться с вами, если вы насмотритесь видео, или начитаетесь курсов.

    Если деньги есть, можно репетитора найти. Есть такие, которые к олимпиадам готовят. Однако это не значит, что они лучше умеют объяснять. Так как, к олимпиадам тоже можно натренировать бездумными процедурами решения стандартных задач, правда там намного меньше таких "стандартных" задач, потому что авторы не любят повторяться.

    По математике я не знаю хороших видео. Возможно этот канал будет интересным: https://www.youtube.com/channel/UCRna3TsezxOptinsv...
    По физике мне нравится очень лектор: https://www.lektorium.tv/lecture/12743
    Ответ написан
    Комментировать
  • Как правильно оценить временную сложность алгоритма?

    @tomatho
    Всё же зависит от того, что в скобках. Если там какие-то условия или циклы, то может оказаться:
    • Дополнительный множитель, из-за того, что выполняется сложная операция.
    • Уберётся множитель, из-за того, что при выполнении некоторого условия выполняется код который сильно дольше проверки этого условия.

    И это далеко не редкость, когда циклов три, а сложность как будто циклов всего два.
    Простейший пример поиск в ширину (bfs). В нём идёт цикл по вершинам, в котором идёт цикл по рёбрам вершины, то есть в худшем случае получается O(N*M) где N - количество вершин, а M количество рёбер, однако очевидно, что это всего лишь O(N+M), Но я хотел подчеркнуть, что это получается из-за того, что в данном алгоритме каждое ребро проходится максимум два раза: O(2M) = O(M), а каждая вершина максимум один раз O(N).
    Ответ написан
    Комментировать
  • Как развить алгоритмическое мышление?

    @tomatho
    Вообще, это не про алгоритмы а про психологию.
    Это состояние - боязнь связанная с ответственностью, это тоже почему перед ЕГЭ школьники сходят с ума.
    Один из способов: изменить отношение к таким событиям, то есть вести себя так, будто конца света не случится если зафейлишь. Воспринимать такое как ничего особенного, и что фэйл что успех - всё будет пучком.
    Других способов не знаю - не психолог.

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

    @tomatho
    Сразу скажу, что описание задачи чуть-чуть отличается от того, что я понял по заголовку.
    По заголовку я подумал, что это структура хранящая некоторое множество из пар (l, r) где l, r обозначают концы интервала. И удаление l, r соответствует удалению пары.
    А оказалось, что это структура которая хранит множество, которое представимо в виде пар (l, r), где каждое (l, r) - такой полуинтервал.

    Первое, что лезет в голову - set, но set не подойдёт так как надо как-то уметь удалять сразу несколько элементов (l, r) если пришел + l r который покрывает несколько элементов, то их надо удалять быстро. Set же даёт возможность их удалять только за m log n где m - количество элементов которые надо удалить, и n размер дерева.

    Так что моё предложение: декартово дерево.
    Я бы предложил дерево отрезков, если бы min l и max r были в разумных пределах, так как оно проще пишется в этом случае.
    Ответ написан
    3 комментария
  • Где найти такую книгу по С#?

    @tomatho
    Не понимаю зачем вообще учить что-то перед изучением <название языка>.
    Почему бы не сразу заняться изучением <названия языка>?
    Ответ написан
    Комментировать
  • Как отрендерить буфер unsigned char* в D3D9 C++?

    @tomatho
    Я знаю два варианта.

    Первый - динамическая текстура. Ключевые слова:

    Теперь немного деталей:
    Usage: D3DUSAGE_DYNAMIC. Если нельзя - то обычная. Как проверить можно или нет - вторая ссылка.
    Формат: D3DFMT_X8R8G8B8 либо D3DFMT_A8R8G8B8 либо конвертируя на лету в D3DFMT_R8G8B8.
    Мипмапы: нет. Объяснение по второй ссылке.

    Чтобы разобраться - берешь любой сэмпл с текстурированым квадратом/треугольником и в нём просто меняешь текстуру на свою и тестишь. Затем уже меняешь формат, и usage (использование).

    Второй вариант - blt прям на surface. Теоретически можно. Практически - не проверял.
    Минусы - нельзя крутить вертеть, и так как это не текстура - соответственно нельзя наложить на мэш. (например нельзя отобразить как в экране некоторого виртуального монитора)
    Возможно и плюсов нет, но посмотреть в эту сторону тоже можно.
    Ключевое:


    PS: Ах да, забыл сказать. Даже не спрашивай меня про DX10+
    Ответ написан
  • Как перебрать массив?

    @tomatho
    Рекомендую делать это днём.
    Открываешь шторы окна, чтобы было посветлее.
    Можешь дополнительно включить свет.
    Берёшь, высыпаешь весь массив на стол.
    Пальцами одни элементы отодвигаешь от других.
    Смотришь, чтоб элементы были хорошие.
    Ну и хорошие прямо со стола пальцем кидаешь в кастрюлю.

    А если серьёзно, то сначала сформулируйте понятнее.
    Ответ написан
    Комментировать
  • У вас «математический склад ума»?

    @tomatho
    У меня в школе по математике было 3, по той причине, что мне никогда не было интересно на уроке.
    Если вы посмотрите на школьную программу, то увидите что все 11 классов это повторение одного и того же. Это я преувеличил, но коэффициент новое/к старому близок к единице.

    И было это 3 потому что не было никакого желания решать ни домашки, ни задачки в классе, так как они были всегда одинаковыми. Потому и математичку я бесил, так как она не могла меня заинтересовать и это её бесило, а стоило меня вызвать к доске, я сразу решал любую задачу :(
    Так вот в итоге из-за ЕГЭ ей пришлось мне поставить 5, так как практика была ставить не меньше чем получилось по ЕГЭ.

    А на счёт склада ума. Я бы так сказал:
    Математический склад ума - это умение мыслить четко и ясно, аргументировано. Я бы не стал относить к математическому складу ума тех, кто умеет хорошо считать. Я вот очень часто ошибаюсь в обычном счёте. Да и зачем мучить голову если есть калькулятор. Однако есть всё же смысл и в устном счёте, но не так уж много.

    Хочу привести пример известный. Есть мастера спорта по шахматам. Шахматы считаются логической задачей. Но есть такая интересная штука. Чему учат шахматы?
    Оказывается, шахматы учат только игре в шахматы. Если мастер спорта в шахматы никогда не играл в какую-нибудь другую логическую игру, например в Го, то и не будет показывать высокий результат.

    А гуманитарный склад ума - это умение делать выводы своими догадками и гаданиями.
    Кроме того, я бы ещё отнёс к гуманитарному складу ума - способность запоминать очень много всяких вещей, и отношений. Как иначе историки могут столько запоминать дат, событий, кто у кого муж / жена, кто чего хотел, почему та или иная страна напала на другую, и наконец... Вечно бесили на уроках истории "назовите причины" чего-то. Я до сих пор не понимаю как можно называть причины не зная обстоятельств достоверно. Или делать выводы из скудных описаний изложенных в учебнике.

    Не знаю конкретных примеров размышлений, но посмотрите например видео от TrashSmash "Это же очевидно!?" Там есть несколько хороших примеров догадок, которые гуманитарии бы с легкостью бы приняли за чистую монету.
    Рекомендую ещё почитать чего-нибудь про когнитивные искажения, думаю не будет лишним.
    Ответ написан
    Комментировать