Skip to content

Commit

Permalink
Actually calculate tipping point, rather than heuristic. Fixes #148
Browse files Browse the repository at this point in the history
  • Loading branch information
dvdoug committed Sep 25, 2018
1 parent d398fe5 commit eeb80cd
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 14 deletions.
5 changes: 3 additions & 2 deletions src/OrientatedItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,14 @@ public function getDepth()
}

/**
* Is this orientation stable (low centre of gravity)
* Is this item stable (low centre of gravity), calculated as if the tipping point is >15 degrees.
*
* N.B. Assumes equal weight distribution.
*
* @return bool
*/
public function isStable()
{
return $this->getDepth() <= min($this->getLength(), $this->getWidth());
return atan(min($this->getLength(), $this->getWidth()) / $this->getDepth()) > 0.261; //radians
}
}
30 changes: 30 additions & 0 deletions tests/VolumePackerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,4 +156,34 @@ public function testAllowsRotatedBoxesInNewRow()

self::assertEquals(9, count($packedBox->getItems()));
}

/**
* Test stability of items is calculated appropriately
*/
public function testIssue148()
{
$box = new TestBox('Box',27, 37, 22, 100, 25, 36, 21, 15000);
$item = new TestItem('Item', 6, 12, 20, 100, false);
$itemList = new ItemList();
for ($i = 0; $i < 12; $i++) {
$itemList->insert($item);
}

$packer = new VolumePacker($box, $itemList);
$packedBox = $packer->pack();

self::assertEquals(12, count($packedBox->getItems()));

$box = new TestBox('Box1',27, 37, 22, 100, 25, 36, 21, 15000);
$item = new TestItem('Item', 6, 12, 20, 100, true);
$itemList = new ItemList();
for ($i = 0; $i < 12; $i++) {
$itemList->insert($item);
}

$packer = new VolumePacker($box, $itemList);
$packedBox = $packer->pack();

self::assertEquals(12, count($packedBox->getItems()));
}
}
24 changes: 12 additions & 12 deletions tests/data/expected.csv
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
0546eccb1318244a8ed430671bf8723b,1,0,18.6,1,0,18.6
055faaa27e98405af37b33e77220f37e,1,0,38.9,1,0,38.9
0570e0d866b5f4d6576e6c87661b7492,1,0,15.4,1,0,15.4
0583138edb945a54c21ecbd1bee3bb74,1,0,53.9,1,0,53.9
0583138edb945a54c21ecbd1bee3bb74,1,0,53.9,1,0,24.6
0589ea6d7faa29202d456b58f5958bca,2,188356,31.4,1,0,19
0592a17a06696b009529c47398ae413d,1,0,27.4,1,0,27.4
05a0d7355f542616bdfaebd5eb2cf711,3,160600.2,31.2,3,160600.2,31.2
Expand Down Expand Up @@ -257,7 +257,7 @@
0dd69752b0581f863670fe1fc341a0cb,2,64,53.3,2,32400,13.9
0de591690429b7a90f2357f1923dbf45,1,0,36.8,1,0,36.8
0e16addc0900d805c8aaf88a9b0e6491,1,0,41.8,1,0,41.8
0e1d0f7619a9c6ff2c8052dc2f488d53,2,0,43.9,2,0,43.9
0e1d0f7619a9c6ff2c8052dc2f488d53,2,0,43.9,2,28561,60.4
0e26b1d44638932453aed48334cf5fdf,2,124962.3,34.3,2,124962.3,34.3
0e380996535e1f1e1cb42bc16442fc9a,2,838140.3,37.2,2,671580.3,19.6
0e4553e3e783e18b020c8d04c3039642,2,306.3,28.1,1,0,17
Expand Down Expand Up @@ -393,7 +393,7 @@
1672e9897bfb16f7f644365da8d6992c,1,0,26.4,1,0,26.4
167db38fa514a30e70f167f70d19f214,1,0,16.2,1,0,16.2
168065302d10d2f4b683e3d5e7475594,2,536556.3,32.7,1,0,19.8
1680b70ba864c313d28c9386ce54ac25,3,12592978.7,44,3,203349.6,49.5
1680b70ba864c313d28c9386ce54ac25,3,12592978.7,44,3,64070.2,38.5
1694662b95ac32661ee2b45826bb54f6,1,0,42.4,1,0,42.4
16a2283358cddda00bf2e47e5ad746d3,1,0,24,1,0,24
16a59c72d05be053c19e4b32ceafaef0,1,0,29.2,1,0,29.2
Expand Down Expand Up @@ -692,7 +692,7 @@
26ed57fc1d5649738e7ee9c7bee278e0,1,0,15.2,1,0,15.2
270bd32c44833ebfe82ec7fbcdc25f48,1,0,19.4,1,0,19.4
270e8965b54f9120d6e1aedaeba15bd7,1,0,29.9,1,0,29.9
27196022d71fa0c0209c10883e2472a5,1,0,35.2,1,0,35.2
27196022d71fa0c0209c10883e2472a5,1,0,35.2,1,0,77.1
274919613dc315f08d2d5e71ed6f412f,1,0,41.6,1,0,41.6
274d4edd3fdb72d972171d12e5cd517d,1,0,32.8,1,0,32.8
2776f894339d90c191c7a6aea383ac89,3,322105.6,72.3,3,322105.6,72.3
Expand Down Expand Up @@ -1129,7 +1129,7 @@
414fe91e92f8ee2b9da5bd53947e8602,1,0,39.3,1,0,39.3
4155b3e8153c79b68a5a0779be6c6f3c,1,0,41.2,1,0,41.2
415f7f89525d77c17b95c6c838c18536,1,0,75.6,1,0,75.6
4162ac2e41d7b5b8b916d6fb1e2beb2c,2,324,52.5,2,324,52.5
4162ac2e41d7b5b8b916d6fb1e2beb2c,2,324,52.5,2,256,52.5
416513bca3c8be3e8c7c25a32a8434d7,1,0,16.9,1,0,16.9
4175dbdd2af48d4a8e517af0a69f2f3b,2,14762.3,23.8,2,12432.3,12.6
417c520b1c5904699d21916bce7f68b6,1,0,41.8,1,0,41.8
Expand Down Expand Up @@ -1364,7 +1364,7 @@
4f35fa7d47961b8bad1e25530af6c264,1,0,21.8,1,0,21.8
4f4deb5c58771ce7c68e1f1afa846b82,1,0,26.2,1,0,26.2
4f5326336c2232176ec552c8ce578a5a,1,0,17.7,1,0,17.7
4f53604ed9dc5471de1e395628c07304,2,625,35.3,2,625,35.3
4f53604ed9dc5471de1e395628c07304,2,625,35.3,2,784,35.3
4f53af6ee62dd4f9ac2d80e1288415c4,1,0,57.6,1,0,57.6
4f5d3f41c52405fd96d49fe7a27bfd58,3,18539483.6,70.5,3,6234148.7,33.2
4f62575d64210456f6cdaadab5d683cb,1,0,27,1,0,27
Expand Down Expand Up @@ -2671,7 +2671,7 @@
9cd086d7383a7c9e7cdfa3961d4e6424,1,0,29.4,1,0,29.4
9ce19bcc04b2e0f132225a35dd7647b4,1,0,37.7,1,0,37.7
9cfc31eea726d9763d68bf5d3f2cd370,1,0,38.9,1,0,38.9
9d105e3fde9b79c56034d1439fd0ebf9,2,306.3,34.5,2,306.3,34.5
9d105e3fde9b79c56034d1439fd0ebf9,2,306.3,34.5,2,72.3,34.5
9d11ec92faa414e0f5b35476679b80a0,1,0,36.8,1,0,36.8
9d1815e84809cc29675219e525932e9f,1,0,21.8,1,0,21.8
9d20db0dcdde5b687436b5c5c2dedcce,1,0,27.5,1,0,27.5
Expand Down Expand Up @@ -2956,7 +2956,7 @@ ad031d6fd4052bc415cd3139995f9719,1,0,16.4,1,0,16.4
ad0723c19db4a769d335266213ac1c5b,1,0,22.2,1,0,22.2
ad0cbd69b08f2ef53b1b73cb0532a624,1,0,27.7,1,0,27.7
ad228828498ecc39f0dc8a615e079300,2,2116,23.3,2,1296,12.3
ad47466ed5264d990af031a3014b8025,2,6806.3,61.1,2,6806.3,61.1
ad47466ed5264d990af031a3014b8025,2,6806.3,61.1,2,306.3,38.2
ad55a1435a4b3b04c751e9bbc8905c80,2,11236,27.1,1,0,8.1
ad5bcb9ea1ec143865d4c4b8bb8ce7de,2,14161,42.9,1,0,12.9
ad72d2553693c6e3a483b379a603f9d9,2,9,24.9,1,0,7.5
Expand Down Expand Up @@ -3069,7 +3069,7 @@ b41c7e7258df26e79e1b28650347fd56,1,0,29,1,0,29
b423880b10399351279cab60c68b443a,2,650.3,42.4,1,0,12.7
b43ea437eab701da97ed33706e1f9293,1,0,60.3,1,0,60.3
b44f0911fc7103f5d5edc01897b29c26,2,28561,24.1,1,0,7.2
b454b36210ef97a7af01230d18ab2e6e,2,26082.3,37.5,2,26082.3,37.5
b454b36210ef97a7af01230d18ab2e6e,2,26082.3,37.5,2,756.3,37.5
b45d470b27445daba17f93572e5675fd,2,1764,19.4,1,0,11.8
b47070b87d435dc69829bd9099cdefb4,1,0,22.9,1,0,22.9
b48094a36f09d0270396724d598ffd06,1,0,18.1,1,0,18.1
Expand Down Expand Up @@ -3519,7 +3519,7 @@ cf6c9e450532cd18a8ee0e3186336947,1,0,37.3,1,0,37.3
cf6eaff128e759b4a181aa09f887c9b3,1,0,33.1,1,0,33.1
cf85b4ef43701bc35b61cdd5b45c05b1,1,0,33.2,1,0,33.2
cfac033866a51bc45580a112c99721c6,1,0,41.4,1,0,41.4
cfbe74ea632a5dc7535536f13260d75f,2,8096870.3,36.6,2,2652.3,21.1
cfbe74ea632a5dc7535536f13260d75f,2,8096870.3,36.6,2,3540.3,21.1
cfc4b256cdea1e6690466b9f13b34cef,1,0,21.1,1,0,21.1
cfc60d3d8ec650a24cddfbf1ce965ca6,1,0,19,1,0,19
cfc9a621edc4d96df95b0a43ca4cecda,2,15006.3,47,2,18632.3,47
Expand Down Expand Up @@ -3742,11 +3742,11 @@ dd0b36c45e6dd7c0bbca1132041a2bc8,1,0,36.1,1,0,36.1
dd10cf63e03f3226d61c074d9d8e1caf,1,0,20.3,1,0,20.3
dd24f8cede11d6722e4fa5a34ffd0f92,1,0,32.4,1,0,32.4
dd5dcec91f88d9e518cc5386b69e1ee5,1,0,22,1,0,22
dd655a5bf318ca48d36010fce2709553,1,0,22.3,1,0,22.3
dd655a5bf318ca48d36010fce2709553,1,0,22.3,1,0,7.3
dd74f550bb177a933b62b5d2836fa4ac,1,0,47.6,1,0,47.6
dd8191420604dcedf2ec59a470b09b4b,2,6642.3,30.5,2,930.3,30.5
dd897cf7eea6d6a7cc0380f78f29ba4f,1,0,35.5,1,0,35.5
dd9218a4b66b8a0378dc16a8fba27f67,2,13593969,45.5,2,28561,35.9
dd9218a4b66b8a0378dc16a8fba27f67,2,13593969,45.5,2,2916,26.2
dd9fb38020ae211a57e53460275d0669,1,0,26.4,1,0,26.4
ddaa30c4e2af2de865dda0e017d98665,2,110.3,49.9,2,110.3,49.9
ddd908a2c90918db7e76f544b2a35883,1,0,44,1,0,44
Expand Down

0 comments on commit eeb80cd

Please sign in to comment.