interpPolar function

void interpPolar(
  1. MorphPlan plan,
  2. double t,
  3. List<Float64List> out
)

Implementation

void interpPolar(MorphPlan plan, double t, List<Float64List> out) {
  for (var k = 0; k < plan.items.length; k++) {
    final it = plan.items[k];
    final o = out[k];
    final n = plan.n;
    final s = math.exp(it.lnSigma * t);
    final ang = it.theta * t;
    final cos = math.cos(ang) * s;
    final sin = math.sin(ang) * s;
    final double cx;
    final double cy;
    final block = it.block;
    if (block != null) {
      final (ox, oy) = block.off;
      final (dx, dy) = block.drift;
      cx = it.ca.$1 + dx * t + (ox * cos - oy * sin - ox);
      cy = it.ca.$2 + dy * t + (ox * sin + oy * cos - oy);
    } else {
      cx = it.ca.$1 + (it.cb.$1 - it.ca.$1) * t;
      cy = it.ca.$2 + (it.cb.$2 - it.ca.$2) * t;
    }
    for (var i = 0; i < n; i++) {
      final px = it.aC[2 * i] + (it.bT[2 * i] - it.aC[2 * i]) * t;
      final py = it.aC[2 * i + 1] + (it.bT[2 * i + 1] - it.aC[2 * i + 1]) * t;
      o[2 * i] = cx + px * cos - py * sin;
      o[2 * i + 1] = cy + px * sin + py * cos;
    }
  }
}