interpPolar function
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;
}
}
}