File indexing completed on 2024-12-15 04:01:12

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include "segment.hpp"
0010 
0011 namespace glaxnimate::math::bezier {
0012 
0013 
0014 struct BezierStruts
0015 {
0016     QPointF B;  ///< Point on a bezier segment
0017     qreal t;    ///< Bezier parameter in (0,1) (should never be 0 or 1)
0018     QPointF e1; ///< Linear handles in de casteljau lerp(e1, e2, t) = B
0019     QPointF e2;
0020 };
0021 
0022 
0023 QPointF get_quadratic_handle(const math::bezier::BezierSegment& segment, const QPointF& B, qreal t);
0024 
0025 math::bezier::BezierSegment cubic_segment_from_struts(
0026     const math::bezier::BezierSegment& segment,
0027     const BezierStruts& struts
0028 );
0029 
0030 BezierStruts cubic_struts_idealized(const math::bezier::BezierSegment& segment, const QPointF& B);
0031 
0032 struct ProjectResult;
0033 
0034 BezierStruts cubic_struts_projection(
0035     const math::bezier::BezierSegment& segment,
0036     const QPointF& B,
0037     const math::bezier::ProjectResult& projection
0038 );
0039 
0040 } // namespace glaxnimate::math::bezier