squareToQuadrilateral static method
Implementation
static PerspectiveTransform squareToQuadrilateral(
double x0,
double y0,
double x1,
double y1,
double x2,
double y2,
double x3,
double y3,
) {
final dx3 = x0 - x1 + x2 - x3;
final dy3 = y0 - y1 + y2 - y3;
if (dx3 == 0.0 && dy3 == 0.0) {
// Affine
return PerspectiveTransform._(
x1 - x0,
x2 - x1,
x0,
y1 - y0,
y2 - y1,
y0,
0.0,
0.0,
1.0,
);
} else {
final dx1 = x1 - x2;
final dx2 = x3 - x2;
final dy1 = y1 - y2;
final dy2 = y3 - y2;
final denominator = dx1 * dy2 - dx2 * dy1;
final a13 = (dx3 * dy2 - dx2 * dy3) / denominator;
final a23 = (dx1 * dy3 - dx3 * dy1) / denominator;
return PerspectiveTransform._(
x1 - x0 + a13 * x1,
x3 - x0 + a23 * x3,
x0,
y1 - y0 + a13 * y1,
y3 - y0 + a23 * y3,
y0,
a13,
a23,
1.0,
);
}
}