computePerspectiveTransform static method
Calculates perspective transformation matrix to flatten quadrilateral into rectangle.
Implementation
static Matrix4 computePerspectiveTransform(DocumentCorners corners, Size targetSize) {
final src = corners.toList();
final dx1 = src[1].dx - src[2].dx;
final dx2 = src[3].dx - src[2].dx;
final dx3 = src[0].dx - src[1].dx + src[2].dx - src[3].dx;
final dy1 = src[1].dy - src[2].dy;
final dy2 = src[3].dy - src[2].dy;
final dy3 = src[0].dy - src[1].dy + src[2].dy - src[3].dy;
final det = dx1 * dy2 - dx2 * dy1;
final g = (det != 0) ? (dx3 * dy2 - dx2 * dy3) / det : 0.0;
final h = (det != 0) ? (dx1 * dy3 - dx3 * dy1) / det : 0.0;
final a = src[1].dx - src[0].dx + g * src[1].dx;
final b = src[3].dx - src[0].dx + h * src[3].dx;
final c = src[0].dx;
final d = src[1].dy - src[0].dy + g * src[1].dy;
final e = src[3].dy - src[0].dy + h * src[3].dy;
final f = src[0].dy;
return Matrix4(
a, d, 0, g,
b, e, 0, h,
0, 0, 1, 0,
c, f, 0, 1,
);
}