AUI Framework  master
Cross-platform module-based framework for developing C++20 desktop applications
bezier.h
1/*
2 * AUI Framework - Declarative UI toolkit for modern C++20
3 * Copyright (C) 2020-2024 Alex2772 and Contributors
4 *
5 * SPDX-License-Identifier: MPL-2.0
6 *
7 * This Source Code Form is subject to the terms of the Mozilla Public
8 * License, v. 2.0. If a copy of the MPL was not distributed with this
9 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 */
11
12#pragma once
13
14
15namespace aui::animation_curves {
20 private:
21 glm::vec2 v1, v2;
22 public:
23 CubicBezier(glm::vec2 v1, glm::vec2 v2) : v1(v1), v2(v2) {}
24
25 float operator()(float t) {
26 float oneMinusX = 1 - t;
27 float oneMinusX2 = oneMinusX * oneMinusX;
28 float oneMinusX3 = oneMinusX2 * oneMinusX;
29 float x2 = t * t;
30 float x3 = x2 * t;
31
32 float result = 3 * v1.x * oneMinusX2 * t + 3 * v2.x * oneMinusX * x2 + 2 * x3 +
33 3 * v1.y * oneMinusX2 * t + 3 * v2.y * oneMinusX * x2 - t;
34 return result;
35 }
36 };
37
38 class Standard: public CubicBezier {
39 public:
40 Standard(): CubicBezier({ 0.4f, 0.0f }, { 0.2f, 1.f }) {}
41 };
42}
Definition: bezier.h:19
Definition: bezier.h:38