Skip to content

Commit

Permalink
Use shortest path even for large angles.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Jul 31, 2012
1 parent 43360e4 commit b4d7993
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 11 deletions.
10 changes: 8 additions & 2 deletions d3.v2.js
Expand Up @@ -878,8 +878,6 @@
ta = a.getItem(i);
tb = b.getItem(i);
if ((type = ta.type) !== tb.type || type <= 1) return;
ra = ta.angle;
rb = tb.angle;
switch (type) {
case 2:
{
Expand All @@ -895,9 +893,17 @@
}
case 4:
{
ra = ta.angle % 360;
rb = tb.angle % 360;
if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;
break;
}
default:
{
ra = ta.angle;
rb = tb.angle;
break;
}
}
sa.push(type = d3_interpolateTransformTypes[type], "(", ra, ")");
sb.push(type, "(", rb, ")");
Expand Down
6 changes: 3 additions & 3 deletions d3.v2.min.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions examples/transform/test-rotate.html
Expand Up @@ -57,7 +57,8 @@
{start: -180, end: 90, expected: [ 180.00, 157.50, 135.00, 112.50, 90.00]},
{start: 180, end: 90, expected: [ 180.00, 157.50, 135.00, 112.50, 90.00]},
{start: -180, end: -90, expected: [-180.00, -157.50, -135.00, -112.50, -90.00]},
{start: 180, end: -90, expected: [ 180.00, -157.50, -135.00, -112.50, -90.00]}
{start: 180, end: -90, expected: [ 180.00, -157.50, -135.00, -112.50, -90.00]},
{start: 780, end: -90, expected: [ 60.00, 22.50, -15.00, -52.50, -90.00]}
];

var tr = d3.select("tbody").selectAll("tr")
Expand Down Expand Up @@ -121,9 +122,8 @@
.each("end", animateExpected);

function rotateTween(d) {
var a = d.start, b = d.end;
if (a - b > 180) b += 360;
else if (b - a > 180) a += 360;
var a = d.start % 360, b = d.end % 360;
if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
return d3.interpolateString("rotate(" + a + ")", "rotate(" + b + ")");
}
}
Expand Down
9 changes: 7 additions & 2 deletions src/core/interpolate.js
Expand Up @@ -179,8 +179,6 @@ var d3_interpolateTransformSimilar = function(a, b) {
ta = a.getItem(i);
tb = b.getItem(i);
if ((type = ta.type) !== tb.type || type <= 1) return;
ra = ta.angle;
rb = tb.angle;
switch (type) {
case 2: {
ra = ta.matrix.e + "," + ta.matrix.f;
Expand All @@ -193,9 +191,16 @@ var d3_interpolateTransformSimilar = function(a, b) {
break;
}
case 4: {
ra = ta.angle % 360;
rb = tb.angle % 360;
if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; // shortest path
break;
}
default: {
ra = ta.angle;
rb = tb.angle;
break;
}
}
sa.push(type = d3_interpolateTransformTypes[type], "(", ra, ")");
sb.push(type, "(", rb, ")");
Expand Down

0 comments on commit b4d7993

Please sign in to comment.