Skip to content

Commit 2c778bf

Browse files
committed
Shorter solution
1 parent f45a98b commit 2c778bf

File tree

2 files changed

+8
-19
lines changed

2 files changed

+8
-19
lines changed

src/pack/enclose.js

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,16 @@ export default function(circles) {
88
export function packEncloseRandom(circles, random) {
99
var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;
1010

11-
var minX = Number.MAX_VALUE, minY = Number.MAX_VALUE;
12-
var maxX = Number.MIN_VALUE, maxY = Number.MIN_VALUE;
13-
for (var k = 0; k < n; ++k) {
14-
var c = circles[k];
15-
minX = Math.min(minX, c.x - c.r);
16-
minY = Math.min(minY, c.y - c.r);
17-
maxX = Math.max(maxX, c.x + c.r);
18-
maxY = Math.max(maxY, c.y + c.r);
19-
}
20-
21-
var cx = (minX + maxX) / 2, cy = (minY + maxY) / 2;
22-
2311
while (i < n) {
2412
p = circles[i];
2513
if (e && enclosesWeak(e, p)) ++i;
26-
else e = encloseBasis(B = extendBasis(B, p, cx, cy), cx, cy), i = 0;
14+
else e = encloseBasis(B = extendBasis(B, p)), i = 0;
2715
}
2816

2917
return e;
3018
}
3119

32-
function extendBasis(B, p, cx, cy) {
20+
function extendBasis(B, p) {
3321
var i, j;
3422

3523
if (enclosesWeakAll(p, B)) return [p];
@@ -48,7 +36,7 @@ function extendBasis(B, p, cx, cy) {
4836
if (enclosesNot(encloseBasis2(B[i], B[j]), p)
4937
&& enclosesNot(encloseBasis2(B[i], p), B[j])
5038
&& enclosesNot(encloseBasis2(B[j], p), B[i])
51-
&& enclosesWeakAll(encloseBasis3(B[i], B[j], p, cx, cy), B)) {
39+
&& enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {
5240
return [B[i], B[j], p];
5341
}
5442
}
@@ -77,11 +65,11 @@ function enclosesWeakAll(a, B) {
7765
return true;
7866
}
7967

80-
function encloseBasis(B, cx, cy) {
68+
function encloseBasis(B) {
8169
switch (B.length) {
8270
case 1: return encloseBasis1(B[0]);
8371
case 2: return encloseBasis2(B[0], B[1]);
84-
case 3: return encloseBasis3(B[0], B[1], B[2], cx, cy);
72+
case 3: return encloseBasis3(B[0], B[1], B[2]);
8573
}
8674
}
8775

@@ -105,7 +93,8 @@ function encloseBasis2(a, b) {
10593
};
10694
}
10795

108-
function encloseBasis3(a, b, c, cx, cy) {
96+
function encloseBasis3(a, b, c) {
97+
var cx = (a.x + b.x + c.x) / 3, cy = (a.y + b.y + c.y) / 3;
10998
var x1 = a.x - cx, y1 = a.y - cy, r1 = a.r,
11099
x2 = b.x - cx, y2 = b.y - cy, r2 = b.r,
111100
x3 = c.x - cx, y3 = c.y - cy, r3 = c.r,

test/pack/enclose-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ it("packEnclose(circles) handles a tricky case", () => {
1111
]),
1212
{
1313
r: 20.790781637717117,
14-
x: 12.80193548387097,
14+
x: 12.801935483870967,
1515
y: 61.59615384615385
1616
}
1717
);

0 commit comments

Comments
 (0)