Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFourPointInterpolatorBackward Class Reference

#include <kis_four_point_interpolator_backward.h>

Public Member Functions

QPointF fallbackSourcePoint () const
 
QPointF getValue () const
 
bool isValid (const qreal tolerance=0.1) const
 
 KisFourPointInterpolatorBackward (const QPolygonF &srcPolygon, const QPolygonF &dstPolygon)
 
QPointF map (const QPointF &pt)
 
void setX (qreal x)
 
void setY (qreal y)
 

Private Attributes

QPointF m_a
 
QPointF m_b
 
QPointF m_c
 
QPointF m_d
 
QPointF m_dstBase
 
qreal m_px {0.0}
 
qreal m_py {0.0}
 
qreal m_qA {0.0}
 
qreal m_qB_const {0.0}
 
qreal m_qB_varX {0.0}
 
qreal m_qB_varY {0.0}
 
qreal m_qC_varX {0.0}
 
qreal m_qC_varY {0.0}
 
qreal m_qD_div {0.0}
 
QPointF m_srcBase
 
qreal m_xCoeff {0.0}
 
qreal m_yCoeff {0.0}
 

Detailed Description

A--—B The polygons must be initialized in this order: | | | | polygon << A << B << D << C; C--—D

Definition at line 24 of file kis_four_point_interpolator_backward.h.

Constructor & Destructor Documentation

◆ KisFourPointInterpolatorBackward()

KisFourPointInterpolatorBackward::KisFourPointInterpolatorBackward ( const QPolygonF & srcPolygon,
const QPolygonF & dstPolygon )
inline

Definition at line 27 of file kis_four_point_interpolator_backward.h.

27 {
28 m_a = dstPolygon[1] - dstPolygon[0]; // AB
29 m_b = dstPolygon[2] - dstPolygon[1]; // BD
30 m_c = dstPolygon[3] - dstPolygon[0]; // AC
31 m_d = m_b - m_c; // BD - AC
32
33 m_qA = m_c.x() * m_d.y() - m_c.y() * m_d.x();
34
35 m_srcBase = srcPolygon[0];
36 m_dstBase = dstPolygon[0];
37 m_xCoeff = srcPolygon[1].x() - srcPolygon[0].x(); // AB_src
38 m_yCoeff = srcPolygon[3].y() - srcPolygon[0].y(); // AC_src
39
40 m_qB_const = m_c.x() * m_a.y() - m_c.y() * m_a.x();
41
42 m_qD_div = 1.0 / (2 * m_qA);
43
44 //m_qB_varX = 0.0;
45 //m_qB_varY = 0.0;
46 }

References m_a, m_b, m_c, m_d, m_dstBase, m_qA, m_qB_const, m_qD_div, m_srcBase, m_xCoeff, and m_yCoeff.

Member Function Documentation

◆ fallbackSourcePoint()

QPointF KisFourPointInterpolatorBackward::fallbackSourcePoint ( ) const
inline

Definition at line 61 of file kis_four_point_interpolator_backward.h.

61 {
62 return m_srcBase + QPointF(0.5 * m_xCoeff, 0.5 * m_yCoeff);
63 }

References m_srcBase, m_xCoeff, and m_yCoeff.

◆ getValue()

QPointF KisFourPointInterpolatorBackward::getValue ( ) const
inline

Definition at line 87 of file kis_four_point_interpolator_backward.h.

87 {
88 static const qreal eps = 1e-10;
89
90 qreal qB = m_qB_const + m_qB_varX + m_qB_varY;
91 qreal qC = m_qC_varX + m_qC_varY;
92
93 qreal nu = 0.0;
94
95 if (qAbs(m_qA) < eps) {
96 nu = -qC / qB;
97 } else {
98 qreal D = pow2(qB) - 4 * m_qA * qC;
99 if (D > 0.0) {
100 qreal sqrtD = std::sqrt(D);
101 nu = (-qB - sqrtD) * m_qD_div;
102 if (nu < 0.0 || nu > 1.0) {
103 qreal nu2 = (-qB + sqrtD) * m_qD_div;
104
105 if (nu2 < 0.0 || nu2 > 1.0) {
106 nu = qBound(qreal(0.0), nu, qreal(1.0));
107 } else {
108 nu = nu2;
109 }
110 }
111 } else {
112 nu = 0.0;
113 }
114 }
115
116 qreal xBasedDenominator = m_a.x() + nu * m_d.x();
117
118 qreal mu;
119
120 if (qAbs(xBasedDenominator) > eps) {
121 mu = (m_px - nu * m_c.x()) / xBasedDenominator;
122 } else {
123 mu = (m_py - nu * m_c.y()) / (m_a.y() + nu * m_d.y());
124 }
125
126 return m_srcBase + QPointF(mu * m_xCoeff, nu * m_yCoeff);
127 }
qreal D(qreal t, const QPointF &P0, const QPointF &P1, const QPointF &P2, const QPointF &P3, const QPointF &p)
const qreal eps
T pow2(const T &x)
Definition kis_global.h:166

References D(), eps, m_a, m_c, m_d, m_px, m_py, m_qA, m_qB_const, m_qB_varX, m_qB_varY, m_qC_varX, m_qC_varY, m_qD_div, m_srcBase, m_xCoeff, m_yCoeff, and pow2().

◆ isValid()

bool KisFourPointInterpolatorBackward::isValid ( const qreal tolerance = 0.1) const
inline

Checks if linear dimensions of the destination polygon are bigger than tolerance.

Definition at line 52 of file kis_four_point_interpolator_backward.h.

52 {
53 const qreal toleranceSq = pow2(tolerance);
54
55 const qreal sq1 = qAbs(m_qB_const);
56 const qreal sq2 = qAbs(KisAlgebra2D::crossProduct(m_b, m_c - m_b + m_a));
57
58 return sq1 + sq2 > 2 * toleranceSq;
59 }
PointTypeTraits< T >::value_type crossProduct(const T &a, const T &b)

References KisAlgebra2D::crossProduct(), m_a, m_b, m_c, m_qB_const, and pow2().

◆ map()

QPointF KisFourPointInterpolatorBackward::map ( const QPointF & pt)
inline

◆ setX()

void KisFourPointInterpolatorBackward::setX ( qreal x)
inline

Definition at line 71 of file kis_four_point_interpolator_backward.h.

71 {
72 x -= m_dstBase.x();
73
74 m_qB_varX = - x * m_d.y();
75 m_qC_varX = - x * m_a.y();
76 m_px = x;
77 }

References m_a, m_d, m_dstBase, m_px, m_qB_varX, and m_qC_varX.

◆ setY()

void KisFourPointInterpolatorBackward::setY ( qreal y)
inline

Definition at line 79 of file kis_four_point_interpolator_backward.h.

79 {
80 y -= m_dstBase.y();
81
82 m_qB_varY = y * m_d.x();
83 m_qC_varY = y * m_a.x();
84 m_py = y;
85 }

References m_a, m_d, m_dstBase, m_py, m_qB_varY, and m_qC_varY.

Member Data Documentation

◆ m_a

QPointF KisFourPointInterpolatorBackward::m_a
private

Definition at line 130 of file kis_four_point_interpolator_backward.h.

◆ m_b

QPointF KisFourPointInterpolatorBackward::m_b
private

Definition at line 131 of file kis_four_point_interpolator_backward.h.

◆ m_c

QPointF KisFourPointInterpolatorBackward::m_c
private

Definition at line 132 of file kis_four_point_interpolator_backward.h.

◆ m_d

QPointF KisFourPointInterpolatorBackward::m_d
private

Definition at line 133 of file kis_four_point_interpolator_backward.h.

◆ m_dstBase

QPointF KisFourPointInterpolatorBackward::m_dstBase
private

Definition at line 146 of file kis_four_point_interpolator_backward.h.

◆ m_px

qreal KisFourPointInterpolatorBackward::m_px {0.0}
private

Definition at line 142 of file kis_four_point_interpolator_backward.h.

142{0.0}; // saved relative X coordinate

◆ m_py

qreal KisFourPointInterpolatorBackward::m_py {0.0}
private

Definition at line 143 of file kis_four_point_interpolator_backward.h.

143{0.0}; // saved relative Y coordinate

◆ m_qA

qreal KisFourPointInterpolatorBackward::m_qA {0.0}
private

Definition at line 135 of file kis_four_point_interpolator_backward.h.

135{0.0}; // quadratic equation A coeff

◆ m_qB_const

qreal KisFourPointInterpolatorBackward::m_qB_const {0.0}
private

Definition at line 136 of file kis_four_point_interpolator_backward.h.

136{0.0}; // quadratic equation B coeff, const part

◆ m_qB_varX

qreal KisFourPointInterpolatorBackward::m_qB_varX {0.0}
private

Definition at line 137 of file kis_four_point_interpolator_backward.h.

137{0.0}; // quadratic equation B coeff, X-dep part

◆ m_qB_varY

qreal KisFourPointInterpolatorBackward::m_qB_varY {0.0}
private

Definition at line 138 of file kis_four_point_interpolator_backward.h.

138{0.0}; // quadratic equation B coeff, Y-dep part

◆ m_qC_varX

qreal KisFourPointInterpolatorBackward::m_qC_varX {0.0}
private

Definition at line 139 of file kis_four_point_interpolator_backward.h.

139{0.0}; // quadratic equation C coeff, X-dep part

◆ m_qC_varY

qreal KisFourPointInterpolatorBackward::m_qC_varY {0.0}
private

Definition at line 140 of file kis_four_point_interpolator_backward.h.

140{0.0}; // quadratic equation C coeff, Y-dep part

◆ m_qD_div

qreal KisFourPointInterpolatorBackward::m_qD_div {0.0}
private

Definition at line 141 of file kis_four_point_interpolator_backward.h.

141{0.0}; // inverted divisor of the quadratic equation solution

◆ m_srcBase

QPointF KisFourPointInterpolatorBackward::m_srcBase
private

Definition at line 145 of file kis_four_point_interpolator_backward.h.

◆ m_xCoeff

qreal KisFourPointInterpolatorBackward::m_xCoeff {0.0}
private

Definition at line 147 of file kis_four_point_interpolator_backward.h.

147{0.0};

◆ m_yCoeff

qreal KisFourPointInterpolatorBackward::m_yCoeff {0.0}
private

Definition at line 148 of file kis_four_point_interpolator_backward.h.

148{0.0};

The documentation for this class was generated from the following file: