szczyglis / php-ulam-spiral-generator
这是一个用PHP编写的数学乌拉姆螺旋生成器和渲染器,具有可编程回调功能。
Requires
- php: ^7.2.5|^8.0
README
版本: 1.2.3 | 构建: 2024.08.26 | PHP: ^7.2.5|^8.0
乌拉姆螺旋生成器
这是一个用PHP编写的数学乌拉姆螺旋生成器和渲染器,具有可编程回调功能。
实时演示: https://szczyglis.dev/ulam-spiral-generator
什么是乌拉姆螺旋?
来源:https://en.wikipedia.org/wiki/Ulam_spiral
乌拉姆螺旋或素数螺旋是数学家斯坦尼斯拉夫·乌拉姆于1963年发明的素数集合的图形表示,后来在《科学美国人》杂志的马丁·加德纳的数学游戏专栏中被广泛传播。它是通过将正整数写入正方形螺旋并特别标记素数来构建的。[...]
如何安装
composer require szczyglis/php-ulam-spiral-generator
功能
- 与任何数据集兼容的乌拉姆螺旋矩阵构建器。
- 内置屏幕螺旋渲染器(作为HTML表格或原始数据)。
- 适用于独立和外部使用(由一个PHP类组成)。
- 可编程回调,用于突出显示和计数行和列中的数字。
- 基于JavaScript的实时突出显示器,用于行、列和对角线。
- 易于使用。
使用示例
<?php // app.php require __DIR__ . '/vendor/autoload.php'; use Szczyglis\UlamSpiralGenerator\UlamSpiral; // configuration $config = [ 'raw' => false, // if true then displays raw spiral (without CSS) 'append_css' => true, // enables CSS stylizing 'append_js' => true, // enables JS features 'no_append_jquery' => false, // disables jQuery script appending if true 'counters_mode' => 'count', // sets counters mode (sum of values or occurencies count) 'row_counters' => true, // enables vertical counters 'col_counters' => true, // enables horizontal counters 'cell_width' => 35, // sets width of cell in pixels, 'cell_height' => 35, // sets height of cell in pixels 'cell_font_size' => 12, // sets font size in pixels ]; $dataset = range(1, 1000); // create dataset $ulam = new UlamSpiral($config); // create new generator $ulam->setDataset($dataset); // define dataset $ulam->addCounter('sum', function($value) { // add custom callbacks for counters ( optional ) return true; }); $ulam->addCounter('prime', function($value) { if (is_integer($value)) { if (UlamSpiral::isPrime($value)) { return true; } } }); $ulam->addMarker('prime', function($value) { // add custom callbacks for markers ( optional ) if (is_integer($value)) { if (UlamSpiral::isPrime($value)) { return '#e9e9e9'; } } }); $ulam->buildMatrix(); // build Ulam spiral matrix echo $ulam->render(); // render spiral $matrix = $ulam->getMatrix(); // returns spiral's matrix
您可以在 $ulam->dataset
中使用任何填充数字或字符的PHP数组。数组中的所有值都将放置在螺旋中。
执行 $ulam->buildMatrix()
后,由该方法创建的矩阵将可用在 $ulam->matrix
数组中。放置在螺旋中的值的x和y坐标将在 $ulam->coords
数组中可用。您可以使用 $ulam->getMatrix()
方法访问矩阵。
截图
CSS样式版本
原始版本
仓库包含
-
src/UlamSpiral.php
- 基类 -
example.php
- 使用示例
配置
您可以通过创建一个 $config
数组并将其传递给构造函数来配置生成器。
数组中的所有键如下所述
raw
(布尔值)-[true|false]
如果为true
,则显示原始螺旋(不带CSS)。默认:false
append_css
(布尔值)-[true|false]
启用CSS。默认:true
append_js
(布尔值)-[true|false]
启用JavaScript。默认:true
no_append_jquery
(布尔值)-[true|false]
禁用jQuery脚本。默认:false
counters_mode
(字符串)-[sum|count]
设置计数器模式(值的总和或发生次数)。默认:count
row_counters
(布尔值)-[true|false]
启用垂直计数器。默认:true
col_counters
(布尔值)-[true|false]
启用水平计数器。默认:true
cell_width
(整数)- 设置每个单元格的像素宽度。默认:35
cell_height
(整数)- 设置每个单元格的像素高度。默认:35
cell_font_size
(整数)- 设置像素字体大小。默认:15
定义自定义回调
数字突出显示
您可以创建自己的标记回调来突出显示特定的数字(例如,素数、偶数、大于指定值的数字等)。回调函数接收一个参数,即当前数字,并必须返回一个用于高亮的HTML颜色代码。如果回调函数返回null
或false
,则数字将不受影响。您可以创建任意数量的标记,每个标记用于不同类型的数字。
以下示例演示了如何创建偶数的标记回调
$ulam = new UlamSpiral(); $ulam->addMarker('even', function($value) { if (is_integer($value)) { if ($value %2 == 0) { return '#e9e9e9'; } } });
带有偶数高亮显示的截图
带有素数高亮显示的截图
每行/每列的数字计数器
计数器回调用于在螺旋表头(水平和垂直)中创建计数器。计数器可以计算行或列中的特定数字并显示结果在行或列表头中。有两种类型的计数器:count
和sum
。您可以在配置中选择行为。
第一种类型 - count
- 计算行或列中指定类型数字的所有出现次数。第二种类型 - sum
- 显示它们的值之和。如果回调函数返回true
,则数字将受到计数器的影响。您可以创建任意数量的计数器,每个计数器用于不同类型的数字。
以下示例显示了如何创建偶数的计数器回调
$ulam = new UlamSpiral(); $ulam->addCounter('even', function($value) { if (is_integer($value)) { if ($value %2 == 0) { return true; } } });
带有偶数计数在表头中的截图
带有素数计数在表头中的截图
鼠标悬停时高亮显示行、列和交叉
变更日志
1.2.0
- 包添加到Packagist(2022-04-23)1.2.1
- 更新PHPDoc(2022-04-25)1.2.2
- 更新composer.json(2022-04-28)1.2.3
- 修复仓库URL并更新README(2024-08-26)
Ulam螺旋生成器免费使用,但如果您喜欢它,可以通过为我买咖啡来支持我的工作;(
https://www.buymeacoffee.com/szczyglis
享受吧!
MIT许可证 | 2022年3月Marcin 'szczyglis' Szczygliński
https://github.com/szczyglis-dev/php-ulam-spiral-generator