2024年小美赛B题Heesch数

2024 年认证机构杯国际数学建模竞赛

http://mcm.tzmcm.cn

1. 问题分析

🧀多边形分类

🧀Heesch数定义

Heesch 的问题 - 维基百科,自由的百科全书 --- Heesch's problem - Wikipedia

在几何图形中,形状的 Heesch 数是同一形状的副本的最大层数,该副本可以围绕它,没有重叠和间隙。

🧀环带

环带是指对于一个多边形,当用与它相同的多边形通过旋转、平移和镜像等操作围绕其形成一圈没有缝隙的多边形组合时,这一圈多边形组合被称为该多边形的环带。  

0环带是多边形本身

k> 0时,第k个环带是与第\left ( k-1 \right )个环带共享边界点的瓷砖集合

图形S的黑施数是存在特定条件下k的最大值

目前已知的有限的最大黑施数是6

Heesch Number 6 的人物:突破二十年的界限 |数学智能者

🧀例子

Heesch数图像
0
1
1
2
4

5

6

\infty

2. Heesch数

构建数学模型和算法创建具有最大黑施数多边形,描述算法原理、实现过程和最终结果,不一定要超已知最佳结果,但算法自动生成最大可能结果即可。

这道题讨论的Heesch数是有限且非0的,要求解的多边形是不能镶嵌且环带能覆盖周长的。

符合要求的多边形有两种,一种是直线型图形,一种是曲线型图形。

🧀直线型图形

🍕随机

🍔生成原始图形S_{0}

生成有n个随机顶点的多边形$S_0=\{(\theta _i,r_i)\mid i=1,2,\cdots,m\}$

其中0\leq \theta_{i}\leq 2\pi0\leq r_{i}\leq 100

🍔假设

$S_0=\{(\theta _i,r_i)\mid i=1,2,\cdots,m\}$为多边形本身

S_{1}=\left \{S_{11}\cup S_{12}\cup \cdots\cup S_{1j}|j=1,2, \cdots,n_1\right \}为环带1

S_{2}=\left \{S_{21}\cup S_{22}\cup \cdots\cup S_{2j}|j=1,2, \cdots,n_2\right \}为环带2

S_{k}=\left \{S_{k1}\cup S_{k2}\cup \cdots\cup S_{kj}|j=1,2, \cdots,n_k\right \}为环带k

k为该多边形对应的最大环带数,即Heesch数。

🍔约束条件

S_{0}=S_{1j}=\cdots =S_{kj}S_{k1}=S_{k2}=\cdots =S_{kj}

S_{0}\cap S_{1}\cap...\cap S_{k-1}\cap S_{k}=0S_{k1}\cap S_{k2}\cap...\cap S_{k(j-1)}\cap S_{kj}=0

S_{0}\cup S_{1}\cup...\cup S_{k-1}\cup S_{k}是一个单连通多边形,

S_k包围S_{ k-1 }

🍔生成环带S_{k}
🍔最优化

如何排列环带使k最大


这种方法生成的多边形十分随机,生成的多边形符合要求的可能性极小。

🍕由正三角形组成

A Figure with Heesch Number 6: Pushing a Two-Decade-Old Boundary | The Mathematical Intelligencer

🍔生成原始图形S_{0}

生成原始图形这里有两种方案。

边扩展法

先生成一个等边三角形,为初代图形,将等边三角形的三个边存入边的集合。

我们在这里随机选择一条边,在这条边的基础上生成一个不与原图形重叠的正三角形。

将新加的三角形的边加入边的集合,刚刚选择的边变为图形内部的一部分,从中边集中删除。

……

这里注意,我们要先设置好组成原始图形的三角形个数。

中心点扩展法

构造二维直角坐标系,将每一个三角形用中心点表示,设三角形的边长为l

设初代图形是顶点朝上的正三角形,用它的中心点\left(\frac l2,\frac l{2\sqrt{3}}\right)表示。

对于顶点朝上的三角形,若要“扩展”,则有三种情况\left(x-\frac{\ell}{2},y+\frac{l}{2\sqrt{3}}\right),\left(x+\frac{\ell}{2},y+\frac{l}{2\sqrt{3}}\right),\left(x,y-\frac{l}{\sqrt{3}}\right)

对于顶点朝下的三角形,若要“扩展”,三种情况分别为\left(x,y+\frac{l}{\sqrt{3}}\right),\left(x-\frac{\ell}{2},y-\frac{l}{2\sqrt{3}}\right),\left(x+\frac{\ell}{2},y-\frac{l}{2\sqrt{3}}\right)。我们将已经选中的三角形用这种方式“扩展”,且不能选择已选中的点。

🍔假设

$S_0$为多边形本身

S_{1}=\left \{S_{11}\cup S_{12}\cup \cdots\cup S_{1j}|j=1,2, \cdots,n_1\right \}为环带1

S_{2}=\left \{S_{21}\cup S_{22}\cup \cdots\cup S_{2j}|j=1,2, \cdots,n_2\right \}为环带2

S_{k}=\left \{S_{k1}\cup S_{k2}\cup \cdots\cup S_{kj}|j=1,2, \cdots,n_k\right \}为环带k

k为该多边形对应的最大环带数,即Heesch数。

🍔约束条件

S_{0}=S_{1j}=\cdots =S_{kj}S_{k1}=S_{k2}=\cdots =S_{kj}

S_{0}\cap S_{1}\cap...\cap S_{k-1}\cap S_{k}=0S_{k1}\cap S_{k2}\cap...\cap S_{k(j-1)}\cap S_{kj}=0

S_{0}\cup S_{1}\cup...\cup S_{k-1}\cup S_{k}是一个单连通多边形,

S_k包围S_{ k-1 }

🍔生成环带S_{k}

由于生成的原始图形$S_{0}$是由正三角形组成的,那么对于任意副本$S_\mathrm{kj}$,在形成环带时,相对$S_{0}$的旋转角只有0°、60°、120°、180°、240°、300°这 6 种可能性。

🍔最优化

如何排列环带使k最大

🍕由正方形组成

[2105.09438] Heesch Numbers of Unmarked Polyforms

🍔生成原始图形S_{0}

这样的原始图形又被称为多联骨牌。多联骨牌(Polyominoes)是由多个正方形以边相连构成的平面图形,在组合数学、计算几何和理论计算机科学等领域有着广泛的应用。在多联骨牌的研究中,生成特定形状或规模的多联骨牌是一个重要的基础问题。

生成多联骨牌有三种方案。

边扩展法

先生成一个正方形,为初代图形,命名为$squ_1$,有四条边分别命名为$e_1,e_2,e_3,e_4$,将这四条边存入边的集合G

我们在这里随机选择一条边,在这条边的基础上生成一个不与原图形重叠的正方形,将新生成的图形命名为$squ_1+squ_2$

将新加的正方形的边加入边的集合G,刚刚选择的边变为图形内部的一部分,从G 中删除,然后重新命名$squ_1+squ_2$的六条边为$e_1,e_2,e_3,e_4,e_5,e_6$

…………

这里注意,我们要先设置好组成原始图形$S_{0}$的的正方形个数U

基于邻域扩展的多联骨牌坐标生成算法

该算法基于邻域扩展的思想,构造二维直角坐标系,将每一个正方形用左下点坐标表示,从一个边长为$\ell$的初始正方形开始,逐步在其邻域中选择新的正方形来构建多联骨牌。每次扩展时,只考虑当前已有的正方形的四个邻域方向(上、下、左、右),即新坐表可能为$(x+\ell,y),(x,y+\ell),(x-\ell,y),(x,y-\ell)$,且不能选择已选中的点,确保生成的正方形是相互连接的,然后得到了一些待选坐标。在选择新坐标时,从待选坐标中随机选择一个坐标,这引入了一定的随机性。然而,整个算法的框架是确定的, 即通过邻域扩展的方式逐步生成多联骨牌。这种随机性与确定性的结合使得算法能够生成多种不同形状的联骨牌。

基于随机游走的多联骨牌坐标生成算法

本算法设计理念融合了随机探索与局部困境处理机制,以确保生成的多联骨牌既满足连通性要求,又具备一定的随机性与多样性。算法起始于二维平面原点坐标,以此为种子点开启坐标扩展进程。在整个坐标生成流程中,定义了一组表示平面基本方向的向量集,涵盖向上、向下、向右以及向左四个方向,以此为基础构建坐标扩展的方向选择框架。在每一轮坐标扩展迭代中,算法优先对当前坐标点的邻域方向进行可用性评估。对于当前坐标点,依据预定义的方向向量集,依次推算出各个方向上的潜在新坐标。通过与已生成坐标集进行比对,筛选出尚未被访问过的方向,这些方向即构成当前坐标点的可用方向集。若当前坐标点存在可用方向,算法将引入随机性因素,从可用方向集中随机抽取一个方向作为本次扩展的方向选择。基于选定的方向,更新当前坐标点至新的位置,并将该新坐标纳入已生成坐标集,从而实现坐标集的逐步扩充。然而,在坐标扩展进程中,可能会遭遇局部死胡同困境,即当前坐标点的所有邻域方向均已被访问,无可用方向可供选择。针对此类情形,算法设计了一套回溯与重选机制。具体而言,算法遍历已生成坐标集中的所有坐标点,针对每个坐标点重新评估其邻域方向的可用性,统计每个坐标点仍具扩展潜力的方向数量。将具有非零扩展潜力方向数量的坐标点收集至候选坐标点集。若候选坐标点集非空,则从中随机选定一个坐标点作为新的当前坐标点,以此为起点继续坐标扩展流程;反之,若候选坐标点集为空,则意味着算法在当前条件下无法成功生成连通的多联骨牌,算法将触发异常终止信号。通过反复执行上述迭代步骤,直至已生成坐标集的规模达到指定坐标点,即原始图形达到指定的正方形数。 

🍔假设

$S_0$为多边形本身

S_{1}=\left \{S_{11}\cup S_{12}\cup \cdots\cup S_{1j}|j=1,2, \cdots,n_1\right \}为环带1

S_{2}=\left \{S_{21}\cup S_{22}\cup \cdots\cup S_{2j}|j=1,2, \cdots,n_2\right \}为环带2

S_{k}=\left \{S_{k1}\cup S_{k2}\cup \cdots\cup S_{kj}|j=1,2, \cdots,n_k\right \}为环带k

k为该多边形对应的最大环带数,即Heesch数。

🍔约束条件

S_{0}=S_{1j}=\cdots =S_{kj}S_{k1}=S_{k2}=\cdots =S_{kj}

S_{0}\cap S_{1}\cap...\cap S_{k-1}\cap S_{k}=0S_{k1}\cap S_{k2}\cap...\cap S_{k(j-1)}\cap S_{kj}=0

S_{0}\cup S_{1}\cup...\cup S_{k-1}\cup S_{k}是一个单连通多边形,

S_k包围S_{ k-1 }

🍔生成环带S_{k}

由于生成的原始图形$S_{0}$是由正方形组成的,那么对于任意副本$S_\mathrm{kj}$,在形成环带时,相对$S_{0}$的旋转角只有 0°、90°、180°、270°这 4 种可能性。

🍔最优化

如何排列环带使k最大

🧀曲线型图形

曲线型几何图形也存在满足要求的,但是由于分析起来比较复杂,这里不做过多研究。

3. 算法复杂度上界

🧀时间复杂度

🧀空间复杂度

“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的据,并通过其内置的字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出据的中断;之后是据读取,通过中断服务程序从DMP接收姿态角据,据通常以四元或欧拉角形式呈现;再接着是据显示,将姿态角据转换为可读的度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值