Интервалы в D

Очень часто в разных задачах встречается один и тот же однотипный шаблон: в зависимости от того, в какой из нескольких, известных заранее, интервалов попало значение, следует предпринять разное действие. Обычно, таким действием является вычисление некоего числа или в общем случае, некой величины (необязательно числовой). Когда интервалов достаточно много, то начинается уже рутина с операторами if или switch, а это повышает вероятность ошибок, да и код смотрится, мягко говоря, не очень…

В таких случаях, нам бы хотелось иметь в D нечто вроде функции cond из LISP-family языков или мощный генератор сопоставлений а-ля match из некоторых современных языков. Но в D этого нет и не планируется к добавлению, а это значит, что проблемой необходимо заниматься программисту.

К счастью, мы кое-что уже придумали…

Читать далее

Отрисовка и закраска многоугольников в dlib

Данный простой рецепт публикуется как один из исторических материалов, который является сейчас частью проекта R.I.P и поможет вам справится с отрисовкой многоугольников (и не только правильных), а также с задачей их закраски. Читать далее

Дискретное вейвлет-преобразование в dlib

В нескольких статьях нашего блога уже затрагивалась тема различной цифровой обработки изображений, но, в основном в них мы касались вопросов явной трансформации изображений (перевод в оттенки серого, фильтрация, применение фильтров и некоторые другие операции) и никак не обращались к способам изменения избыточности изображений. Под избыточностью, в данном случае, понимается некая абстрактная мера, связанная с количеством информации, которое содержится в некоем изображении. Обычно, когда упоминаются выражения наподобии “способ изменения избыточности” или “метод уменьшения информационной энтропии”, то речь идет об алгоритмах сжатия или алгоритмах эффективного представления неких данных.

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

Поэтому, я хотел бы рассказать сегодня о дискретном вейвлет-преобразовании, а точнее, об одной из самых известных его версий – дискретном преобразовании Хаара.

Читать далее

Добавляем итерируемые системы функций в dlib

Сегодня я расскажу о том, как я осуществил перенос наработок из проекта нашей библиотеки для обработки изображений Raster and Image Processor (RIP) в библиотеку «швейцарский нож для D» dlib. В статье я немного расскажу о том, как при минимуме усилий и использованной инфраструктуре проекта rip, мне удалось подарить вторую жизнь старой идее реализации Итерируемой Системы Функций (ИФС) и перенести ее со старой dgui (об этом я уже как-то писал) в новую среду.

Читать далее

QtE5EntryPoint

Относительно недавно (пару месяцев назад) я разработал небольшой шаблон, который упрощает жизнь тем нашим читателям, кто после ряда публикаций в нашем блоге активно начал работу с замечательной библиотекой QtE5.

Данный шаблон упрощает создание основной процедуры main, автоматически создавая ее со всеми нужными вспомогательными процедурами и нужным активным классом основного виджета, который принимается шаблоном в качестве аргумента.
Читать далее

Проверка любого типа на принадлежность к числовым

Иногда возникает необходимость проверить является ли некоторый тип числовым, при этом, если тип относится к числовым, то не важно целое ли это число или же с плавающей точкой.

То есть решение должно быть универсальным… Читать далее

Опыт применения D в химической лаборатории

Наверное, название этой статьи слишком громкое для того, о чем я собираюсь рассказать, но как говорится за неимением лучшего, воспользуемся тем, что есть под рукой в данный момент… Читать далее

Поиск уникальных элементов в массиве

Довольно часто встречается задача поиска уникальных элементов в массивах или каких-то иных последовательностях данных со схожим интерфейсом доступа и казалось бы тут не должно быть проблем, особенно, если учесть тот факт, что в Phobos в модуле std.algorithm есть такая замечательная вещь, как uniq, но… Читать далее

Превращение набора данных в строку

Программисты на Python знают, что у строк в этом замечательном языке программирования есть интересный метод join, который, если мне не изменяет память, получая на вход список данных и разделитель, склеивает эти данные, объединяя их через переданный разделитель. Однако, поиски по стандартной библиотеке D не позволили найти аналог для такого метода (хотя возможно, я плохо искал) – и пришлось выкручиваться самому, ведь мне очень нужна функция, похожая по поведению на метод join. Читать далее

Удобное создание свойств в классах и структурах

В этой статье покажу Вам небольшой “трюк” для вставки свойств в классы и структуры.

Работает это примерно так: формируется строка (из переданных аргументов – тип для значения свойства и имя свойства, а также из собственно, объявления приватной переменной и объявления самого свойства) с описанием методов установки/считывания свойства и помещается в константный массив символов – и все, шаблон готов к использованию. Читать далее