Задать вопрос
  • Есть ли простая математика расчета попадания в зону?

    @Mercury13
    Программист на «си с крестами» и не только
    Вам уже подсказали общие способы. Теперь специализированные.
    Точка гарантированно в охватывающем прямоугольнике. Мы получаем уравнения прямых и смотрим, с какой стороны. Проще всего это делать через косое произведение векторов — AX×AB <> 0, или
    (x − xA)(yB − yA) − (xB − xA)(y − yA) <> 0
    Ответ написан
    Комментировать
  • Сможет ли работать такая сетевая схема?

    @Mercury13
    Программист на «си с крестами» и не только
    В этой системе два внешних IP-адреса. И раз уж провайдеры закрепляют IP-адрес за портом на своём свитче — то не будет.
    Сейчас, когда адреса IPv4 закончились, может и работать, когда, например, они за провайдерским NAT, но традиционно — нет. Или вы реально купили два IP-адреса.
    Ответ написан
    Комментировать
  • Как вывести результат программы на cpp в ms excel?

    @Mercury13
    Программист на «си с крестами» и не только
    Есть три варианта.
    1. Найти библиотеку работы с Excel. Самая маленькая и открытая — libxlsxwriter.
    2. Сохранять в более простых форматах. Самый простой из них — CSV. Не забудьте, что русский и английский Excel работают с разными CSV.
    3. Использовать OLE-автоматизацию Excel.
    У Спольского есть статья, почему форматы M$ Office такие сложные: https://rutlib5.com/book/25666/p/27
    Ответ написан
    Комментировать
  • Как учить линейную алгебру для ИИ семикласснику?

    @Mercury13
    Программист на «си с крестами» и не только
    Я советую начинать не с линейной алгебры, а с вычислительной геометрии.
    Там те же матрицы 2×2 и 3×3. Как бонус — сможешь работать в 3D.

    UPD1. Ну, например, что можно сделать просто в 2D.
    • Находится ли точка внутри фигуры?
    • Какой отрезок фигуры самый близкий к точке и на каком расстоянии?
    • Художественно поискажать фигуру.
    • Пересекаются ли отрезки и в какой точке?
    • Выпуклая оболочка кучи точек.
    • Круг, описанный вокруг кучи точек.
    • Проекция точки на прямую или отрезок.
    • Стоят три точки по часовой стрелке, против или на прямой.
    • Является ли ломаная самопересекающейся?
    • Диаграммы Вороного, триангуляции Делоне.
    • Прямоугольник произвольной ориентации, описанный вокруг кучи точек.
    • Круг, вписанный в выпуклый многоугольник.
    • Является ли многоугольник звёздчатым, и если да — каково ядро?
    • Простой движок с возможностями где-то между Wolf3D и Doom, но с портальным алгоритмом на манер Duke3D.
    Ответ написан
    4 комментария
  • Что означают надписи Ty, Alloc, Allocator в ошибке?

    @Mercury13
    Программист на «си с крестами» и не только
    Вы попытались запустить функцию vector<A*>::erase с необычными параметрами. Какие — в ошибке не говорится, вот все перегрузки.
    https://ru.cppreference.com/w/cpp/container/vector...
    То есть функция принимает один или два итератора.

    Например, если вы хотите удалить значение, но неизвестно, где, нельзя его просто erase. А надо…
    // Спрессовать без перевыделения памяти, получить новый конец
    std::vector<A*>::iterator newEnd = std::remove(v.begin(), v.end(), whatToDelete);
    // Удалить освободившийся хвост скопом!
    v.erase(newEnd, v.end());


    Если вы хотите удалить по индексу…
    v.erase(v.begin() + indexToDelete);
    Ответ написан
  • Как правильно хэшировать файл большого размера?

    @Mercury13
    Программист на «си с крестами» и не только
    Я не понял, что значит «хэшировать». Если получить хэш-сумму — то все алгоритмы расчёта хэш-сумм позволяют скармливать файл небольшими блоками. И методика зависит библиотеки файлов и хэш-сумм, которой вы сейчас пользуетесь.
    Ответ написан
    Комментировать
  • Какая разница между передачей по указателю и по ссылке?

    @Mercury13
    Программист на «си с крестами» и не только
    О передаче объекта в функцию — обычно ссылка, НО!

    1. Если библиотека живёт на указателях (Qt) — указатель.
    void fillCombo(QComboBox* x) {}  // хорошо
    fillCombo(ui->comboHistory);
    
    void fillCombo(QComboBox& x) {}  // плохо
    fillCombo(*ui->comboHistory);


    2. Если возможен NULL — указатель. НО: существует паттерн «Null object», и он иногда бывает хорош.
    // Хуже, но возможно
    void import(AsyncRunner* asy) {
       if (asy) {
          asy->run([](){
            doImport(x);
          });
       } else {
          doImport(x);
       }
    }
    import(nullptr);
    
    // Лучше
    void import(AsyncRunner& asy) {
      asy.run([](){
        doImport(x);
      });
    }
    import(NoAsync::INST);


    3. Если передаём буфер данных — указатель.
    void write(size_t size, const char* data) {}

    4. Если объект невелик — значение.
    void save(std::string_view fileName) {}

    Объект может быть велик, но для него существуют специальные регистры — тогда…
    void transform(Matrix4 x) {}
    Есть одна машина с такими регистрами, не помню только, какая. Xbox?

    5. Идиома «by value + move», позволяющая избавиться от двух версий функции — Obj(string&) и Obj(string &&). Используется для объектов с простым перемещением и сложным копированием — обычно строк и структур STL.
    Obj::Obj(std::string aName) : name(std::move(aName)) {}
    Ответ написан
    Комментировать
  • Какие ошибки в экранах приложения?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Непонятен смысл журнала, ведь это какая-то новостная лента.
    2. Освещённость в люксах избыточна, ведь Солнце светит одинаково, а люксы зависят от облачности, пыли, времени суток и года. То же самое с влажностью — она производна от других параметров.
    3. Люксы сокращаются как «лк», а мили в русском не стоит сокращать «ми».
    4. Странный диапазон силы ветра, спишем на ограничение.
    5. Слишком много экранного места отдано дому, что имеет смысл лишь если домов несколько.
    6. Непонятен смысл кнопок «Автоматическая настройка» и «Информация».
    7. Настраивать погоду на несколько дней — замучаешься.
    8. Наше «божественное устройство», управляющее погодой, скорее всего имеет какие-то ограничения, и их надо указать.
    9. Тут нужно указывать не просто миллиметры дождя, а его силу. Дождик целый день и большая гроза на полчаса — немного разное.
    10. У вас какой-то мягкий нагскрин, большинство прог, которые я видел, просят оплату наглее.
    Ответ написан
    3 комментария
  • Существует ли структура данных «расширяемая 2D-таблица»?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Пока остановился на таком механизме.
    Есть два одномерных массива — оглавление строк и оглавление столбцов, два одномерных массива — задействованность строк/столбцов, а также двухмерный массив — буфер.

    a[i,j] := buffer[rowIndex[i−i0], colIndex[j−j0]]

    Если в rowIndex[i−i0] замечен маркер незадействованности, находим незадействованную строку и прописываем её в оглавлении.
    Чтобы меньше перевыделять памяти, перевыделение идёт импульсами и с запасом. Например, хотим 20 строк, а выделяем сразу на 30.
    Такой массив способен только расширяться, но этого мне хватает.
    Ответ написан
    Комментировать
  • Это сколько 63 280,4 млн. долл.?

    @Mercury13
    Программист на «си с крестами» и не только
    Миллиарда
    Я бы такому редактору бил по рукам: постороннему читателю надо писать 63,3 млрд долларов.
    Ответ написан
    Комментировать
  • Как заряжать данный аккумулятор?

    @Mercury13
    Программист на «си с крестами» и не только
    Это обычные необслуживаемые аккумуляторы от бесперебойника.
    Автомобильное зарядное катит, но зарядный ток, получается, порядка 3 ампер (а лучше — 1 ампер). Найдётся такой?
    Если соединять вместе — то параллельно, удвоив ток. Хотя лучше поодиночке.
    12 вольт 10 ватт дают чуть меньше ампера, у таких аккумуляторов обычно порядка 7 ампер-часов, и одна лампочка на одном аккумуляторе будет работать 7 часов.
    UPD. Уточнил значение тока.
    Ответ написан
    2 комментария
  • Как записать правило математическими символами?

    @Mercury13
    Программист на «си с крестами» и не только
    ∀i Nkk i= 1 & Li ≤ 8
    Ответ написан
    1 комментарий
  • Аппаратный переключатель раскладки, есть такой в природе?

    @Mercury13
    Программист на «си с крестами» и не только
    Преобразованием скан-кодов клавиш в печатаемые символы занимается система, и без программы-хука это в принципе невозможно сделать. В программах, работающих на правах администратора, хук не работает, и, разумеется, аппаратный переключатель будет бесполезен.

    Может, как-то и можно сделать, чтобы наш переключатель был клавиатурой и передавал какие-нибудь очень нестандартные комбинации клавиш вроде F13 (да, была такая клавиша на какой-то дремучей XT-клавиатуре). Но, во-первых, они должны быть без Shift/Ctrl — иначе бы это конфликтовало с обычной клавой. Во-вторых, на 10-ке я просто не вижу горячих кнопок для раскладок.

    UPD. Настройки клавиш нашёл (чёртова 10-ка, где из интерфейса новой Панели вызываются куски старой), установка раскладок без Ctrl невозможна.
    Ответ написан
    Комментировать
  • Почему не любят c++ builder?

    @Mercury13
    Программист на «си с крестами» и не только
    Я работал, и профессионально тоже.
    1. Вторичен по отношению к Delphi, и те, кому нужна «амбаркадебра», осваивают Delphi. Носит на себе и Паскаль, и Си, и потому громадные EXE’шники.
    2. До недавнего времени — устаревший компилятор. Сейчас и под x86, и под x64 clang. Где-то до 2012 вообще x64 не было!
    3. Поставили не на тот кроссплатформенный фреймворк — не нравится мне FireMonkey.
    4. WinForms как-то проще в разработке.
    5. Долгое время — невнятная лицензионная политика «амбаркадебры».
    6. Долгое время — отсталость Delphi/VCL (например, нет Юникода).
    Ответ написан
    Комментировать
  • Как при изменение размеров окна удержать выведенный текст?

    @Mercury13
    Программист на «си с крестами» и не только
    Первое, самое главное. WM_PAINT рисует содержимое окна целиком. Если нужны тысяча надписей — или рисуйте их тысячу штук, или отпечатайте на внеэкранный BITMAP, или ещё что-нибудь.

    Это экономит память: Win3 хреново, но работала на одном мегабайте, лично видел. Но имеет побочный эффект — если прога перестаёт отвечать, например, в 95 с её вытесняющей многозадачностью, WM_PAINT никак не вызовешь, и будет белое окошко. XP (вроде она) кэширует содержимое окна и выводит его, пока прога не отвечает.

    Второе. InvalidateRect в WM_PAINT не имеет смысла. Смысл этого вызова — попросить Windows перерисовать окно, когда получится.
    Ответ написан
    2 комментария
  • В чем разница связаного списка от хеш-таблицы?

    @Mercury13
    Программист на «си с крестами» и не только
    Связанный список решает такую задачу: как хранить коллекцию объектов, добавляя и удаляя туда объекты. (Простите, что я не пишу характеристики того и другого, почитайте это в умных книгах)

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

    Хэш-таблица решает другую задачу: наладить отображение ключ→значение. Например, «осёл → иа, петух → кукареку», и так далее. Массив, только индексом будет не цифра, а что-то другое: x[«осёл»] = «иа». Так называемый ассоциативный массив.

    Если индексом массива может быть только цифра, поступим так: превратим нашего осла в цифру — например, о+с+ё+л = 4363 (в Юникоде), и пусть 63 — это номер гнезда. В 63-м элементе массива пусть и лежит наше «осёл → иа».

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

    @Mercury13
    Программист на «си с крестами» и не только
    MAC-адрес принадлежит LG Electronics. Вероятно, на «янчуде» MAC-адрес был скопирован с ноутбука LG, а потом сам этот ноутбук подключился к этой сети.
    Ответ написан
    2 комментария
  • Каков смысл скалярного произведения в Cel Shading?

    @Mercury13
    Программист на «си с крестами» и не только
    Отвечу по существу.

    У нормали длина всегда 1. Иногда это реально вектор, перпендикулярный к полигону — если мы хотим осветить плоский полигон как плоскость. Иногда мы хотим из плоских полигонов создать впечатление криволинейной поверхности и потому делаем (например, интерполяцией или специальной текстурой, т.н. картой нормалей) непрерывное поле нормалей.

    Вектор луча — это единичный (или той длины, какой хочешь) вектор, идущий от источника света к той точке, с которой работаем. (Ну или наоборот, смотря как формула записана.)

    Если длина вектора луча тоже 1 — то результат будет [−1…1]. Если он меньше 0 (в случае, если нормаль наружная, а луч идёт от источника света) — перед нами коэффициент, во сколько раз реальная освещённость меньше, чем обеспечиваемая источником света. Если больше — поверхность в собственной тени. (Расчёт падающих теней — отдельный и сложный вопрос.)

    С цел-шейдингом никак это не связано, это вообще база по освещению.
    Ответ написан
    Комментировать
  • SwapBuffers/ glXSwapBuffers потребляет ровно 50% времени работы приложения(нагрузка неважна),в чём может быть причина?

    @Mercury13
    Программист на «си с крестами» и не только
    glSwapBuffers крутится в ожидании VSYNC’а. Потому и потребляет столько.
    Ответ написан
  • Как прочесть аргументы функции на стеке / заставить gcc хранить аргументы функции на стеке?

    @Mercury13
    Программист на «си с крестами» и не только
    https://godbolt.org/z/ARYhis
    Если посмотреть в пролог функции, она делает локальную копию нашей a. А желаемое место в стеке на 36 байтов выше, чем вы ищете.
    Разумеется, всё под x86. Вызов под x64 подразумевает регистры.

    UPD. А вот Интел не делает локальных копий и всё на месте.
    Ответ написан
    Комментировать