Задать вопрос
  • Почему экраны имеют разрешения не кратны степени 2? Почему 1080, а 1024, если вместо умножения на 1080, можно сдвинуть 10 байт?

    @TomsEkb
    Дело в количестве делителей.
    Если у вас есть изображение со стороной 1024, и вам нужно его уменьшить в 3 или 5 раз - поздравляю, у вас проблемы. Всё потому, что число 1024 имеет разложение 2^10 и всего 11 делителей: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024. Из них полезны нам от силы 4-5.
    Если же у вас сторона изображения равна 1080, то у вас большой простор для манипуляций, т.к. 1080 имеет разложение 2^3 х 3^3 х 5, а это уже целых 32 делителя: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 18, 20, 24, 27, 30, 36, 40, 45, 54, 60, 72, 90, 108, 120, 135, 180, 216, 270, 360, 540, 1080. Из них полезны уже гораздо больше, порядка 12-15 делителей. Большим достоинством является гораздо более высокая равномерность шкалы масштабирования, мы можем уменьшить изображение в 2, 3, 4, 5, 6 раз. Мы даже можем уменьшить изображение в 1.2, 1.5, 1.8 раз - и все ещё получим целые числа: 900, 720, 600. Мы можем даже поделить нацело на 1.08 и 1.35. Число 1024 здесь очень сильно проигрывает в свободе действий.
    Математика вездесуща. Всем добра.
    Ответ написан
    Комментировать
  • Как добиться такого эффекта при наведении?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Интересная задача. В общем весь фокус в том, что поверх видимых карточек, лежит точно такая же сетка с невидимыми карточками у которых есть только синий border. На сетку, которая лежит сверху, наложена маска:
    mask: radial-gradient(320px 320px at var(--x) var(--y), black 1%, transparent 40%);

    То есть у всего блока с синими border остается видимым только радиальный градиент в 320px, а x и y это координаты курсора. Ну и грубо говоря получается такая картина:

    Ответ написан
    4 комментария
  • Как оптимизировать алгоритм самонаведения ракеты?

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

    Обозначьте |MSL_VEL - TGT_VEL| за t.

    Получите уравнение TGT_DIR = (MSL_VEL-TGT_VEL)/t

    Преобразуйте: TGT_DIR*t = (MSL_VEL-TGT_VEL)

    Но тут неизвестные вектор MSL_VEL и t. Но они связаны, ведь t - это длина вектора. Обозначим неизвестный вектор MSL_VEL как (x, y, z) Значит:
    t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2

    Ну и еще вы знаете, что скорость ракеты фиксированная же:
    x^2+y^2+z^2 = MSL_SPEED^2

    У вас тут 4 неизвестных и аж 5 уравнений (ведь первое - это векторное уравнение):
    TGT_DIR_x*t = x - TGT_VEL_x
    TGT_DIR_y*t = y - TGT_VEL_y
    TGT_DIR_z*t = z - TGT_VEL_z
    t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2
    x^2+y^2+z^2 = MSL_SPEED^2


    Раскройте скобки в 4-ом, подставьте туда пятое и из первых трех выразите x, y, z:

    t^2 = MSL_SPEED^2+TGT_SPEED^2-2*TGT_VEL_x*(TGT_DIR_x -t*TGT_VEL_x)-... = MSL_SPEED^2+(1-2t)TGT_SPEED^2-2(TGT_DIR*TGT_VEL)


    Там в конце векторное произведение векторов. Дальше сами раскройте и получите квадратное уравнение на t. Решите его по школьной формуле. Если дискриминант отрицательный, то решения тупо нет. Слишком быстро цель улепетывает. Потом не забудьте проверить, чтобы t получилось положительное. Потом подставьте t в первые 3 уравнения и найдите искомые x, y, z.

    Еще можно так себе это все представить. Свяжем систему координат с целью. Тогда множество точек, куда может смотреть скорость ракеты - это сфера с центром в TGT_VEL и радиусом MSL_SPEED. Вам надо выбрать на этой сфере точку так, чтобы она была коллинеарна с вектором TGT_DIR. Т.е. у вас есть луч из центра координат вдоль векторо TGT_DIR. Вам надо найти где он пересечет сферу. Введите параметр t вдоль луча и дальше получите то же самое квадратное уравнение.
    Ответ написан
    2 комментария
  • Как создают интерфейсы в программах?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Самый низкий уровень - системные вызовы:
    Это WinAPI, X11 и т.д. Я не десктоп разработчик, но сейчас мало кто ими пользуется.

    Дальше идут фреймворки, потроенные вокруг них:
    Это wxWidgets, WTL (Windows Template Library)

    И на самом верху - полноценные языки разметки/программирования:
    Qt, XAML, Electron

    Дополнительно, никто не мешает свой фреймворк написать оконный - поверх существующих WinAPI, либо через графический фреймворк (SDL, например)
    Ответ написан
    1 комментарий
  • Как создают интерфейсы в программах?

    @tifco
    Например, касаемо Qt, я читал как создавать интерфейсы ("сигнал-слоты" или же именно окошки?) при помощи данного фреймворка. Но это программирование на C++. Не на Си.
    Сами по себе Cи и С++, в силу своего давнего развития, заточены для консоли. Какие там графические средства могут быть "из коробки"?
    Да и понятие ООП (объектно-ориентированное прогр.), на принципах которого и строятся оконные интерфейсы, появилось позже, уже в C++. Т. к. последний - язык Си и надмножество над ним. Т. е. дополнительные возможности. Потому так и говорят C++ - Cи с плюсами или Си с классами. Сам же по себе Си - структурно-ориентированный ЯП (если не ошибаюсь). Со всеми вытекающими. Старенький он, старенький. Что вы от него хотите? Кроме низкоуровневого, системного программирования.
    Что касаемо WinAPI, что-то я сомневаюсь в его возможностях на данный счет. Иначе бы зачем тогда дополнительные фреймворки лепить, если бы все было в комплекте?
    Выше пишут про геометрию на экране. Я уж не помню, вроде бы в "Pelles C" можно было выйти в некий графический режим (графическая "песочница"). В рамках которого рисуй себе что хочешь. Быть может и окошки с кнопками, на свой лад. Этот графический режим похож на тот, что применяется часто, для обучения программированию, в Basic. Там ничего другого делать нельзя, кроме как: round, line, circule и т. п. - только на Си. Толи в книге, что в комплекте с этим компилем, этот режим был описан, толи пример был в самой программе приведен. Точно не скажу. Я как-то нашел его, случайно, чисто из любопытства. Можно ли сделать интерактивные объекты - вопрос. А вот просто нарисовать - да.
    В общем, это, не претендую на абсолютную истину. :)
    Ответ написан
    1 комментарий
  • Как создают интерфейсы в программах?

    Но какой язык разметки и оформления для десктопных программ?

    Какой хочешь, тот и будет.
    1. Хочешь - можно втащить тот же html и css в виде Electron, CEF или чего-то самодельного.
    2. Хочешь - никакого не будет и будешь сам рисовать геометрию на экране.
    3. Хочешь - будет что угодно на спектре от п1 до п2.

    Если тебя интересует именно Си, то можешь посмотреть на GTK, например.
    Ответ написан
    Комментировать
  • Как сделать перенос строки в сообщении от Telegram Bot?

    abdurohman
    @abdurohman
    1С программист, администратор
    Нужно использовать символ переноса строки %0A
    Ответ написан
    3 комментария
  • Как сделать перенос строки в сообщении от Telegram Bot?

    @devtricks
    sendMessage?chat_id=45311499&text=Первая%20строка.%0AВторая%20строка.
    Этот способ получился у меня.
    Ответ написан
    Комментировать
  • Чем отличается FOR от WHILE?

    DevMan
    @DevMan
    В чем разница как выводить, если результат один?
    технически разницы никакой, разница только в семантике:
    • for(буквально "для") - применяется когда нужно что-то выполнить в определенном диапазоне. то есть на человеческом языке это будет звучать примерно как: "для такого диапазона мы делаем что-то".
    • while(буквально "пока") - применяется когда нужно что-то выполнять неопределенное кол-во раз до выполнение конкретного условия. то есть на человеческом языке это будет звучать примерно как: "делать что-то пока не выполнится условие".
    Ответ написан
    5 комментариев