squareToQuadrilateral static method

PerspectiveTransform squareToQuadrilateral(
  1. double x0,
  2. double y0,
  3. double x1,
  4. double y1,
  5. double x2,
  6. double y2,
  7. double x3,
  8. double y3,
)

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,
    );
  }
}