• Почему ближайшие точки определяются неправильно?

    @Quark_Hell Автор вопроса
    C++ программист
    Для будущих поколений вот рабочая версия:
    static inline bool ClosetPointBetweenAxis(std::pair<Vector3, Vector3> axis1,std::pair<Vector3, Vector3> axis2, Vector3& point) {
    		Vector3 axis1Vector = Vector3::GetNormalize(axis1.second - axis1.first);
    		Vector3 axis2Vector = Vector3::GetNormalize(axis2.second - axis2.first);
    
    		float normU = Vector3::DotProduct(axis1Vector, axis2Vector);
    
    		//parallel
    		if (fabs(normU) == 1)
    			return false;
    
    		Vector3 cn = Vector3::GetNormalize(Vector3::CrossProduct(axis2Vector ,axis1Vector));
    		Vector3 projection = axis1Vector * Vector3::DotProduct(axis2.first - axis1.first, axis1Vector);
    		Vector3 rejection = axis2.first - axis1.first - axis1Vector * Vector3::DotProduct(axis2.first - axis1.first, axis1Vector) - cn * Vector3::DotProduct(axis2.first - axis1.first, cn);
    		Vector3 closetApproach = axis2.first - axis2Vector * Vector3::GetMagnitude(rejection) / Vector3::DotProduct(axis2Vector, Vector3::GetNormalize(rejection));
    
    		point = closetApproach;
    		return true;
    	}


    взята отсюда
    Ответ написан
    Комментировать
  • Как отследить причину краша в winforms?

    @Quark_Hell Автор вопроса
    C++ программист
    По итоги я просто методом тыка нащупал контрол, который крашил всё. Я работал с ним в инициализаторе формы, который, походу, срабатывает после рекомпайла, в связи с чем возникала нулл ошибка, ведь нужные ему данные ещё не существуют
    Ответ написан
    Комментировать
  • Как получить кординаты мышки в winAPI?

    @Quark_Hell
    C++ программист
    Если вы желаете узнать где относительно консоли в данный момент находится курсор, то взглянити вот эту мою реализацию: функция

    Функция возвращает позицию курсора в формате COORD. По желанию можете полностью перенести в свой проект класс ConsoleInfo, в котором реализовано множество функционала для удобной работы с консолью.
    Ответ написан
    Комментировать
  • Как сделать обработчик коллизий в OpenGL?

    @Quark_Hell
    C++ программист
    Коллизии никто не пишет с применением OpenGL. В задачи этой библиотеки такие функции не входят. Если вы желаете написать свой собственный обработчик коллизии в 3D, то рекомендую обратить внимание на алгоритмы GJK и EPA. Вот хорошии уроки, по которым я сам недавно реализовывал коллизии: GJK EPA

    По желанию можете также глянуть мой код, где я их реализовывал: код

    Ещё раз уточню, что в задачи OpenGL входит только рендеринг графики. Не стоит пытаться использовать его для чего-то ещё.
    Ответ написан
    Комментировать
  • Почему после билда CMake функции из других файлов не вызываются?

    @Quark_Hell Автор вопроса
    C++ программист
    Решением моей проблемы оказалось довольно простым. Внутри кода я относительно задал ссылки на используемые мною файлы. Для построенной версии путь к проекту выглядел уже иначе, поэтому необходимые мне файлы были null.
    Ответ написан
    Комментировать
  • Как сделать чтобы объект не выходил за границы экрана?

    @Quark_Hell
    C++ программист
    Создаём canvas и добавляем туда обьект(пусть будет спрайт)

    Далее смотрим на числа:
    63bc6268ba6ab839840124.png
    63bc62823600f257215258.png

    Соответсвенно левой границе соответсвуют координаты -540

    Для зависимости от размера добавляем учёт размера обьекта:
    63bc63d08ad2a850003474.png

    Результат:
    63bc63e2e44f2822865673.png

    Стоит, однако, отметить, что не UI-ный объект не имеет Canvas скейлеров , поэтому контролировать позицию относительно экрана и рамки экрана вам придётся в ручную
    Ответ написан
    Комментировать
  • Что добавить в код, чтобы текстовая строка прорисовывалась в окне с дополнительным эффектами(Указано ниже с какими, Win 32 C++)?

    @Quark_Hell
    C++ программист
    На счёт рисовки вдоль кривой, была в универе недавно похожая задача, только там нужно было нарисовать график функции на промежутке.
    Вот можешь глянуть код:

    define SCREENW 119
    #define SCREENH 30
    
    void DrawFunction(FILE* fout, double a, double b, double (*f)
        (double))
    {
        char screen[SCREENW][SCREENH];
        double x, y[SCREENW];
        double ymin = 0, ymax = 0;
        double hx, hy;
        int i, j;
        int xz, yz;
    
        hx = (b - a) / (SCREENW - 1);
        for (i = 0, x = a; i < SCREENW; ++i, x += hx) {
    
            y[i] = f(x);
    
            if (y[i] < ymin) ymin = y[i];
            if (y[i] > ymax) ymax = y[i];
        }
        hy = (ymax - ymin) / (SCREENH - 1);
        yz = (int)floor(ymax / hy + 0.5);
        xz = (int)floor(-a / hx + 0.5);
    
        for (j = 0; j < SCREENH; ++j) {
            for (i = 0; i < SCREENW; ++i) {
                if (j == yz && i == xz)
                    screen[i][j] = '+';
                else if (j == yz)
                    screen[i][j] = '-';
                else if (i == xz)
                    screen[i][j] = '|';
                else
                    screen[i][j] = ' ';
    
            }
        }
        for (i = 0; i < SCREENW; ++i) {
            j = (int)floor((ymax - y[i]) / hy + 0.5);
            screen[i][j] = '.';
        }
    
        for (j = 0; j < SCREENH; ++j) {
            for (i = 0; i < SCREENW; ++i)
                fputc(screen[i][j], fout);
            fprintf(fout, "\n");
        }
    }
    
    double FirstFunct(double x)
    {
        return pow(log10(sin(4 * x) + 1), 2);
    }
    
    void A1() {
    //Промежуток тут от 0 до 2
    //Уравнение функции записано в FirstFunct
        DrawFunction(stdout, 0, 2.0, FirstFunct);
    }

    Вот вывод в консоли и в гугл таблицах соответственно:
    63bc27aeb6da1944780971.jpeg

    Однако учти, что символ в консоли имеет четкую ЦЕЛОЧИСЛЕННУЮ позицию (COORD)

    Получается делаем вывод, что символ не может находиться где-то посередине
    Ответ написан
    Комментировать
  • Как сделать движение по параболе?

    @Quark_Hell
    C++ программист
    "графиком квадратичной функции является парабола y=ax^2+bx+c , где a≠0"
    Ответ написан
    Комментировать
  • Как рисовать символами в терминале?

    @Quark_Hell
    C++ программист
    Вот мой проект,глянь там классы ConsoleInfo и Draw.

    https://github.com/Quark-Hell/ChallengeGame

    Однако у меня класс Draw рисует 1D фигуры,так что тебе нужно будет немного переписать этот класс.
    Ответ написан
  • Почему возникает Unresolved external symbol?

    @Quark_Hell Автор вопроса
    C++ программист
    Моё решение:
    Добавил в определение КАЖДОГО метода в .cpp следующий код:"__declspec(dllexport)"
    В целом это выглядит примерно так:
    public:
       __declspec(dllexport) static void DrawObject(COORD coord, GameObject object) {
    //Your code...
    }
    Ответ написан
    Комментировать
  • Почему не работает событие OnClicked у кнопки в UE4?

    @Quark_Hell Автор вопроса
    C++ программист
    Решение:
    Если делаете 3Д меню,то не забудьте активировать этот чекбокс.Иначе OnClicked события не будут работать.
    60afc372d187f463533228.png
    Ответ написан
    Комментировать
  • Как получить ссылку на UI элемент в с++?

    @Quark_Hell Автор вопроса
    C++ программист
    Не используйте NewObject для получения ссылки на UUserWidget класс.При таком подходе BindWidget просто не сработает и ваши ссылки на виджеты будут равны null.
    Ответ написан
    Комментировать