Skip to content

Commit a071e70

Browse files
committed
fix #188; floating point error in encloseBasis3
1 parent c3833aa commit a071e70

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/pack/enclose.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ function encloseBasis3(a, b, c) {
114114
A = xb * xb + yb * yb - 1,
115115
B = 2 * (r1 + xa * xb + ya * yb),
116116
C = xa * xa + ya * ya - r1 * r1,
117-
r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
117+
r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
118118
return {
119119
x: x1 + xa + xb * r,
120120
y: y1 + ya + yb * r,

test/pack/enclose-test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import assert from "assert";
2+
import {packEnclose} from "../../src/index.js";
3+
4+
// https://github.com/d3/d3-hierarchy/issues/188
5+
it("packEnclose(circles) handles a tricky case", () => {
6+
assert.deepStrictEqual(
7+
packEnclose([
8+
{x: 14.5, y: 48.5, r: 7.585},
9+
{x: 9.5, y: 79.5, r: 2.585},
10+
{x: 15.5, y: 73.5, r: 8.585}
11+
]),
12+
{
13+
r: 20.790781637717107,
14+
x: 12.80193548387092,
15+
y: 61.59615384615385
16+
}
17+
);
18+
});

0 commit comments

Comments
 (0)