小编DRT*_*DRT的帖子

PHP & Geometry - 如何优雅地计算常见的对象方向(长度/宽度/高度)?

我试图让 PHP 调整一些数组值,以便在通过该功能的所有对象实例中,它将比较这些数组值的长度宽度和高度,并尽可能地对齐它们。

想象一下,3 个香烟盒。它们的大小、形状和体积完全相同,但一个是直立的,一个是平躺的,另一个是短边的。

然后,想象第四个香烟盒。它的长度和宽度与其他包相同,但是它的容器内有更多的香烟包,因此使其高度(或宽度/长度取决于用户输入)与其他包相同。

该函数仍应尝试将数据包定向到数组中的原始数据包。

视觉示例

香烟纸盒的例子并不是真正的应用。我有一堆盒子需要整理成共同的排列,以便它们可以堆叠。它应该足够聪明,可以在至少 2 次测量中计算或忽略与类似大小的对象相关的任何其他形状。如果所有 3 个尺寸相同但方向不同,则应在适用的情况下更正它们,或者如果无法比较则跳出循环。

我已经模拟了一些示例 PHP 代码,它们应该会给出一些很好的测试用例和预期的结果。

任何帮助都非常感谢,我尝试了很多 array_diffs 和 array_intersects 的组合,但似乎对所有场景都缺少 1 个解决方案。

更新:

我想我开始意识到有 3 类计算。在实现之后,它们可能能够被重构。

如果您考虑第一个不会旋转的对象,那么它有三种可能性,我可能需要为每个对象编写单独的逻辑以应用于其下的每个循环。也许案例1和案例2的逻辑会有些相似......

  1. AxBxC 所有不同尺寸,比较
  2. AxBxB 2 种相似尺寸,比较
  3. AxAxA 所有相同尺寸,无旋转

所以它至少消除了一些因素......仍在努力解决它......

<?php

$params['object'] = array();
/* START TEST 1 */
$params['object'][] = array(    'height'=>'30',
                                'width'=>'10',
                                'length'=>'20');
$params['object'][] = array(    'height'=>'20',
                                'width'=>'30',
                                'length'=>'30');
/* END TEST 1 */
/* START TEST 2 
$params['object'][] = array(    'height'=>'30',
                                'width'=>'30',
                                'length'=>'20');
$params['object'][] = array(    'height'=>'30',
                                'width'=>'20',
                                'length'=>'30');
/* END TEST …
Run Code Online (Sandbox Code Playgroud)

php mysql arrays geometry object

6
推荐指数
0
解决办法
409
查看次数

标签 统计

arrays ×1

geometry ×1

mysql ×1

object ×1

php ×1