• Возможно ли проверить является ли T std::function?

    @Acaunt
    Если правильно понял вопрос, то можно сделать так:
    Пример
    #include <iostream>
    #include <functional>
    
    template<class T>
    struct is_function {
        constexpr static bool value = false;
    };
    
    template<class T>
    struct is_function<std::function<T>> {
        constexpr static bool value = true;
    };
    
    template<class T>
    constexpr static bool is_function_v = is_function<T>::value;
    
    template<class T>
    void check(T t) {
        if constexpr (is_function_v<T>) {
            std::cout << "is std::function" << std::endl;
        }
        else {
            std::cout << "is not std::function" << std::endl;
        }
    }
    
    void f2() {}
    
    int main() {
        std::function f1 = [](){};
        std::function f3 = f2;
        check(f1); // is std::function
        check(f2); // is not std::function
        check(f3); // is std::function
        
        return 0;
    }
    Ответ написан
    Комментировать
  • Почему появляется ошибка на несуществующую текстуру?

    @Acaunt
    Необходимо очистить кэш проекта блендера
    Ответ написан
    Комментировать
  • Правильно ли в C++ использовать директиву препроцессора define?

    @Acaunt
    define полезная штука и её не обязательно использовать так как ты (лично я не вижу смысла использовать её для этого).

    Например:
    Если у тебя много файлов ссылаются друг на друга то можно конечно использовать #pragma once, но эта штука работает не во всех компиляторах. Поэтому предпочтительнее использовать:
    #ifndef FILE_H
    #define FILE_H
    #include "file1.h"
    #include <iostream> например этот  заголовочный файл объявлен и в file1.h
    #endif // !FILE_H


    Ещё в заголовочном файле math.h есть константы (число пи например), но они скрыты если не объявлен #define _USE_MATH_DEFINES

    Подобную штуку я использовал в своем проекте вот пример:
    #if TYPE_64
    using type = uint64_t; 
    #elseif defined(TYPE_32)
    using type = uint32_t; 
    #elseif defined(TYPE_16)
    using type = uint16_t; 
    #else
    using type = uint8_t; 
    #endif


    Ещё можно подобные штуки расставить по всему коду для вывода информации о работе программы на проверку есть ли #define DEBUG, а когда программа готова то просто убрать этот define и программа будет чуть быстрее работать, так как участки кода с выводом информации не будут работать.
    Ответ написан
    1 комментарий
  • Почему конструктор присваивания не присваивает переменной значение суммы двух других переменных?

    @Acaunt
    Смотри у тебя вывод переменных происходит в конструкторе. Поэтому в операторе+ ты создаешь объект с параметрами по умолчанию, которые равны нулю, но после создания уже присваиваешь значения в этот объект.

    Ты можешь это лучше увидеть если добавишь одну строку с кодом в оператор+:

    trash operator + (const trash & other)
    	{
    		trash temp;
            temp.x = this->x + other.x;
    		temp.y = this->y + other.y;
                    cout << "x = " << temp.x << "\ty = " << temp.y << endl;
    		return temp;
    	}


    Эту строку ты можешь добавить и к другим операторам чтобы увидеть результат.

    Либо ещё один вариант как это можно сделать:

    trash operator + (const trash & other)
    	{
    		return trash(x + other.x,  y + other.y);
    	}


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

    @Acaunt
    Вот два простых примера как это можно сделать:
    #include <iostream>
    #include <functional>
    
    void f(const std::string& str) {
        std::cout << str;
    }
    
    void foo(void (*f)(const std::string&), const std::string& str) {
        f(str);
    }
    
    void Foo(std::function<void(const std::string&)> F, const std::string& str) {
        F(str);
    }
    
    
    int main() {
        foo(f, "Hello");
        Foo(f, " world");
        return 0;
    }


    foo пример без использования STL
    Foo пример с использованием STL

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

    @Acaunt
    У меня возник встречный вопрос. А зачем тебе вообще нужно объединять части объекта? Если ты делаешь хайпольку для того чтобы запечь нормали на лоупольке, то это не обязательно.(это моё предположение)

    Но если тебе так нужно то смотри:
    Выбери рёбра основания цилиндра. В панели, где координаты пишут найди пункт "Средний размер складки" (я использую русский интерфейс, поэтому возможно тебе прийдётся временно включить русский язык) это самая нижняя настройка, и выбери значение 1 это позволит сохранить геометрию.
    Ответ написан
    Комментировать
  • Как создать чертеж автомобиля имея его фотографии сбоку, спереди и сзади?

    @Acaunt
    В Компас 3D можно вставить фоотграфии.

    После вставки тебе необходимо привести к одинаковому масштабу машины (не забудь выравнить их по углу, потому что на фотографии они могут быть немного под углом). Для этого найди на фотографиях, например сбоку и спереди, какие-нибудь хорошо видимые точки (или можно взять нижний и верхний габарит машины), которые видны на обоих фотографиях (желательно минимум 2, а лучше больше). Проведи прямые параллельные линии от одной фотографии, к другой фотографии. После попробуй отмасштабировать вторую фотграфию так чтобы выбранные тобой точки совпадали с проведёнными линиями. Проведи эту же процедуру и с другими фотографиями.

    Ну и впринципе всё дальше просто обводи все явно выраженные габариты машины, но смотри может быть небольшое искажение из-за перспективы на фото поэтому не старайся делать всё точь в точь как на фотографии.

    Надеюсь мои советы помогут.
    Ответ написан
    Комментировать
  • В чем ошибка блок-схемы?

    @Acaunt
    Ну снова привет. Уже отвечал на другой твой вопрос с другой блок схемой. Ты сам то можешь самостоятельно проанализировать свою блок схему?

    Ну ладно про эту блок схему:
    1) у тебя не все операции прописаны в блок схеме, и не все понятны что конкретно делает определённый блок например вывод в консоль.
    2) в цикле не правильно указаны пути от логического сравнения
    654330fa5ad27364227815.png

    Ну вроде это всё.
    Ответ написан
    Комментировать
  • В чем ошибка блок-схемы?

    @Acaunt
    Я последний раз трогал блок схемы в начальных классах поэтому возможно не совсем правильно нарисовал. Но основную мысль думаю можно увидеть.
    653189808fb8a794620742.png
    Первое что я заметил это перепутаны логические выходы проверки на количество оценок.
    Второе отсутствует операция сложения оценок.
    Третье как по мне не очень понятен был показан у тебя пути работы цикла, не было стрелки того куда идти для повторения цикла и логический выход из цикла.
    Возможно ещё что-то, но я не совсем хорошо помню эти блок схемы.
    Ответ написан
    Комментировать
  • Ошибка: for требуется объявление. Как исправить?

    @Acaunt
    Для начала просто убери цикл в классе. Циклы не вставляют прямо в класс, а вставляют в методы.
    Ответ написан
    3 комментария
  • Почему UV на стенах квартиры неправильный?

    @Acaunt
    Смотри да есть автоматические разворачивает UV-развёрток, но они разворачивают на основании своей логики. Они не понимают как должна лежать текстура в пространстве, поэтому всё равно после развёртки прийдётся в ручную потом исправлять недочёты. В данном случае который я вижу у тебя на фото у тебя все UV-острова находящиеся справа от 1 большого UV-острова нужно повернуть на 90 градусов или в правую или в левую сторону (возможно индивидуально для каждой). Плюс в данном случае я бы не разделял каждый полигон отдельно друг от друга а лучше объединил в один большой UV-остров, так как если ты повернешь на 90 градусов те UV-острова нет ни какой гарантии в том что текстура ляжет идеально. Поэтому рекомендую каждую плоскость стен объединять в каждый самостоятельный один большой UV-остров, а потом ещё двигать в стороны на UV-развёртке для того чтобы избежать швов текстуры. Да понимаю, что это может занять очень много времени, но результат того стоит.
    П.С. Можешь не бояться того что UV-развёртка больше текстуры, так как если ты нашёл хорошую бесшовную текстуру, то она будет повторяться за пределами своего размера.
    Ответ написан
    Комментировать
  • Как построчно записать файл в каждый элемент массива LittleFS?

    @Acaunt
    С Ардуино не знаком, но вот как это можно сделать в стиле C++:
    Функция чтения
    #include <fstream>
    #include <vector>
    
    bool read_file(std::string name_file, std::vector<std::string> &arr) {
        // Открываю текстовый файл для чтения
        std::ifstream read;
        read.open(name_file);
        
        // Проверяю открылся ли текстовый файл.
        // Если не открылся, то выхожу из функции с возвратом значения ЛОЖЬ
        if (!read.is_open()) {
            read.close();
            return false;
        }
        
        // Читаю текстовый файл до конца
        while (!read.eof()) {
            // Получаю текстовое значение одной строки в текстовом файле
            std::string str;
            getline(read, str);
            
            // Добавляю полученое текстовое значение в конец вектора
            arr.push_back(str);
        }
    
        read.close();
        
        // Выход из функции с возвратом значения ИСТИНА
        return true;
    }
    Пример использования
    #include <iostream>
    #include <vector>
    
    int main() {
        // Вектор в который будем записывать значения тектового файла
        std::vector<std::string> arr;
        
        // Проверяем получилось ли прочесть текстовый файл
        // Если не получилось выполняем какой-нибудь код
        if (!read_file("C:\\Text.txt", arr)) {
            std::cout << "Fail read file" << std::endl;
        }
        
        return 0;
    }
    P.S. Если возникнут вопросы пиши
    Ответ написан
    2 комментария