velliz / timetables
使用二维笛卡尔图实现的时刻表算法
0.1.0
2018-11-14 02:21 UTC
This package is auto-updated.
Last update: 2024-09-14 19:09:36 UTC
README
使用二维笛卡尔图实现的时刻表算法。
安装
composer require velliz/timetables
使用
标准
使用提供的示例,为X和Y维度创建一个实例标准。您可以创建自定义的 TimeDatum 和 RoomDatum 类,通过扩展到 Datum
抽象来创建。
$criteriaX = new \tests\TimeDatum(); $criteriaX->data = 5; $criteriaX->closeData = array(4, 6);
$criteriaY = new \tests\RoomDatum(); $criteriaY->data = 93; $criteriaY->closeData = array(92, 94);
$criteriaY->data
是您想要搜索的确切内容,而 $criteriaY->closeData
如果在XY维度中未找到数据则可接受。
驱动程序
$timetable = new \timetables\TimetableDriver();
维度
此示例创建了一个长度为900的随机 TimeDatum,其值范围从0到100。
$dimenX = new timetables\cartesius\Dimensions(); for ($i = 0; $i < 900; $i++) { $data = new \tests\TimeDatum(); $data->data = rand(0, 100); $timetable->addDimenX($data); }
此示例创建了一个长度为100的随机 RoomDatum,其值范围从0到100。
$dimenY = new timetables\cartesius\Dimensions(); for ($i = 0; $i < 500; $i++) { $data = new \tests\RoomDatum(); $data->data = rand(0, 100); $timetable->addDimenY($data); }
结果
算法将找到值为5的 TimeDatum 和值为93的 RoomDatum。
$result = $timetable->setCriteriaX($criteriaX)->setCriteriaY($criteriaY)->CalculateTimeTable();
计算结果
array(6) { ["BestX"]=> int(893) ["BestY"]=> int(83) ["Criteria"]=> array(2) { ["X"]=> int(5) ["Y"]=> int(93) } ["Result"]=> array(2) { ["X"]=> int(5) ["Y"]=> int(93) } ["Iteration"]=> int(13812) ["Remark"]=> string(5) "CLEAR" }
计算
要创建自定义比较规则,您可以实现自定义类并将其 扩展 到 Datum
class CustomRoomDatum extends Datum
并实现 CalculateFits 函数。
public function CalculateFits(Datum $comparator) { //simple comparison logic if ($comparator->data === $this->data) { return Datum::EQUALS; } else if (in_array($this->data, $comparator->closeData)) { return Datum::CLOSE; } return Datum::NOT_MATCH; }
$comparator->data
是从函数参数传递的您的标准$this->data
是比较的主要用途,并从 Dimensions 中填充
然后返回提供的常数
Datum::EQUALS
如果数据匹配Datum::CLOSE
如果数据接近匹配Datum::NOT_MATCH
如果数据不匹配