问题二
由于问题一只考虑了圆孔之间的固定距离与运动状态,问题二需要考虑整个板凳的长度与宽度以及板凳之间相互位置是否产生干扰,故需要在第一问圆孔运动的基础上加入板凳长与宽的具体条件,构建各个板凳的具体数学模型,通过求解板凳各边的数学方程与宽度约束将板凳等效为螺线中的矩形块,同时为各个板凳之间设定0-1决策变量 δ i j \delta_{ij} δij,用于判定第 i i i个板凳与第 j j j个板凳之间是否存在面积交错,若非相邻板凳之间存在面积交错则判断此时存在相撞情况,求解最早出现相撞情况的时间 t c t_c tc并将其作为参数代入第一问位置速度模型即可完成第二问的求解。
模型的建立
板凳矩形模型的建立
根据题意,各个板凳的把手中心均位于螺线上,且前后板凳通过把手实现上下交错连接,故可将单个板凳等效为一个矩形,建立单个板凳位于螺线上的几何模型,此时设第 i i i个板凳的前孔中心的位置为 ( x i , y i ) (x_i,y_i) (xi,yi),其中 i i i表示第 i i i个板凳,根据板凳间的交错连接关系,后孔的位置可写为 ( x i + 1 , y i + 1 ) (x_{i+1},y_{i+1}) (xi+1,yi+1),,由于板凳可等效为一个长宽已知的矩形,则其与螺线之间的几何关系如下图所示:
由图可知,板凳中两把手所在的圆孔中心在平面上位于螺线上,将两中心连接,设此直线方程为:
l 0 : y = k x + b 0 l_{0}:y=kx+b_0 l0:y=kx+b0
显然该直线方程可以由两圆孔中心坐标确定,可写为:
y − y i = y i + 1 − y i x i + 1 − x i ( x − x i ) y-y_i=\frac{y_{i+1}-y_i}{x_{i+1}-x_i}(x-x_i) y−yi=xi+1−xiyi+1−yi(x−xi)
由于板凳等效为一个长宽已知的矩形,根据几何关系,矩形的长边需平行于 l 0 l_0 l0,故可设该板凳两长边分别为 l 1 l_1 l1与 l 2 l_2 l2,则可设两者的方程为:
l 1 : y = k x + b 1 l 2 : y = k x + b 2 l_{1}:y=kx+b_1\\ l_{2}:y=kx+b_2 l1:y=kx+b1l2:y=kx+b2
由于矩形的宽长度已知,可根据两直线之间的距离公式,得到 b 1 b_1 b1与 b 2 b_2 b2满足的方程为:
d = ∣ b 0 − b ∣ 1 + k 2 d=\frac{|b_0-b|}{\sqrt{1+k^2}} d=1+k2∣b0−b∣
其中 k = y 2 − y 1 x 2 − x 1 k=\frac{y_2-y_1}{x_2-x_1} k=x2−x1y2−y1, d d d为板凳宽度的一半,即15cm。
显然该方程求解得到的两根即为 b 1 b_1 b1与 b 2 b_2 b2。再根据矩形长与宽所在直线斜率满足关系 k 1 ⋅ k 2 = − 1 k_1 \cdot k_2=-1 k1⋅k2=−1与圆孔距离宽边的距离,即可求解出板凳宽边满足的方程。首先根据点 ( x i , y i ) (x_i,y_i) (xi,yi)与矩形长边的斜率 k k k,即可求解出过该点在宽边上垂线的与矩形宽边的交点 ( x w , y w ) (x_w,y_w) (xw,yw)坐标可表示为:
{ x w = x i + 1 k 2 + 1 ⋅ l y w = y i + k k 2 + 1 ⋅ l \begin{cases} x_w=x_i+\frac1{\sqrt{k^2+1}}\cdot l\\y_w=y_i+\frac k{\sqrt{k^2+1}}\cdot l& \end{cases} {xw=xi+k2+11⋅lyw=yi+k2+1k⋅l
其中 l l l为圆孔中心到边缘的距离,由于圆孔中心到较远边缘和较近边缘均满足该式子,故此处均使用 l l l表示, k k k为前文中求解出的长边斜率。根据点 ( x w , y w ) (x_w,y_w) (xw,yw)以及斜率 k 1 = − 1 k k_1=\frac{-1}{k} k1=k−1即可导出宽边的方程为:
y = − 1 k ( x − ( x i + 1 k 2 + 1 ⋅ l ) ) + ( y i + k k 2 + 1 ⋅ l ) y=-\frac1k(x-(x_i+\frac1{\sqrt{k^2+1}}\cdot l))+\left(y_i+\frac k{\sqrt{k^2+1}}\cdot l\right) y=−k1(x−(xi+k2+11⋅l))+(yi+k2+1k⋅l)
由于板凳四边还满足长度约束,设圆孔中心到较近边缘距离为 l 1 l_1 l1,到较远边缘距离为 l 2 l_2 l2,设第 i i i个板凳的矩形区域为 S i S_i Si,综上所述则可写出板凳矩形区域 S i S_i Si满足的约束方程组如下:
{ l 1 : y = k x + b 1 l 2 : y = k x + b 2 l 3 : y 1 = − 1 k ( x − ( x i + 1 k 2 + 1 ⋅ l 1 ) ) + ( y i + k k 2 + 1 ⋅ l 1 ) l 4 : y 2 = − 1 k ( x − ( x i − 1 k 2 + 1 ⋅ l 2 ) ) + ( y i − k k 2 + 1 ⋅ l 2 ) ∣ b 0 − b ∣ 1 + k 2 = 15 , 其中 b 1 , b 2 为其两根 k = y 2 − y 1 x 2 − x 1 l 1 − l 2 = { 286 , 龙头到龙身的距离 165 ,龙身之间的距离 \begin{cases} l_{1}:y=kx+b_1\\ l_{2}:y=kx+b_2\\ l_{3}:y_1=-\frac1k(x-(x_i+\frac1{\sqrt{k^2+1}}\cdot l_1))+\left(y_i+\frac k{\sqrt{k^2+1}}\cdot l_1\right)&\\ l_{4}:y_2=-\frac1k(x-(x_i-\frac1{\sqrt{k^2+1}}\cdot l_2))+\left(y_i-\frac k{\sqrt{k^2+1}}\cdot l_2\right)\\ \frac{|b_0-b|}{\sqrt{1+k^2}}=15,其中b_1,b_2为其两根\\ k=\frac{y_2-y_1}{x_2-x_1}\\ l_1-l_2=\begin{cases} 286,龙头到龙身的距离\\ 165,龙身之间的距离 \end{cases} \end{cases} ⎩ ⎨ ⎧l1:y=kx+b1l2:y=kx+b2l3:y1=−k1(x−(xi+k2+11⋅l1))+(yi+k2+1k⋅l1)l4:y2=−k1(x−(xi−k2+11⋅l2))+(yi−k2+1k⋅l2)1+k2∣b0−b∣=15,其中b1,b2为其两根k=x2−x1y2−y1l1−l2={286,龙头到龙身的距离165,龙身之间的距离
板凳相撞的判断
根据题意,可计算出每个板凳圆孔到最近矩形顶点的距离为: 27. 5 2 + 1 5 2 = 31.3 ( c m ) \sqrt{27.5^2+15^2}=31.3(cm) 27.52+152=31.3(cm),由于 2 × 31.3 = 62.6 > 55 2 \times31.3=62.6>55 2×31.3=62.6>55,故一定存在两个板凳相撞的可能,故定义决策变量 δ i j \delta_{ij} δij,用于判断第 i i i个板凳与第 j j j个板凳之间是否相撞,由于相邻板凳之间是通过把手连接存在高度差,其直线方程区域存在固定的重叠,故不考虑相邻板凳之间的相撞,由此可写出决策变量的表达式为:
δ i j = { 1 , S i ∩ S j ≠ ∅ 且 ∣ i − j ∣ > 1 0 , 其他 \delta_{ij}= \begin{cases} 1,S_i\cap S_j\neq\emptyset\quad\text{且}\quad|i-j|>1 \\ 0,其他 \end{cases} δij={1,Si∩Sj=∅且∣i−j∣>10,其他
在板凳龙的运动过程中,只要出现相撞情况,即对任意 δ i j \delta_{ij} δij出现为1的情况,则停止板凳龙运动,此时即为舞龙队盘入的终止时刻,可以决策变量表示为:
∑ i = 1 223 ∑ j = 1 , 223 δ i j > = 1 \sum_{i=1}^{223}\sum_{j=1,}^{223}\delta_{ij}>=1 i=1∑223j=1,∑223δij>=1
即板凳龙运动过程中出现满足上式的最早时刻,即为舞龙队盘入的终止时刻 t c t_c tc,将该时刻带入第一问的模型,即可求解出此时舞龙队的位置和速度。
模型的求解
问题二的求解过程基于前文所述的数学公式,但是在具体实现的过程中需要实现矩形的构建,此处本文使用Python中的shapely库实现,通过对矩形的定义与方程(28)实现矩形模型位置的计算,最后通过实时进行决策变量判断此时是否出现相撞,具体步骤如下所示:
Step1 设定时间步进与坐标速度计算
设定固定的时间步进 Δ t = 1 0 − 2 s \Delta t=10^{-2}s Δt=10−2s,作为参数带入问题一模型求解出此时的位置坐标与速度。
Step2 根据圆孔中心确定矩形位置
对于任意第 i i i个矩形的两圆孔 ( x i , y i ) (x_i,y_i) (xi,yi)与( x i + 1 , y i + 1 x_{i+1},y_{i+1} xi+1,yi+1),计算两点的中点 ( x i + x i + 1 2 , y i + 1 + y i 2 ) (\frac{x_i+x_{i+1}}{2},\frac{y_{i+1}+y_i}{2}) (2xi+xi+1,2yi+1+yi),将其作为矩形的中心,通过前文式(28)计算出两边的斜率,设定其矩形的方向与长宽即可确定其在螺线中的相对位置。
Step3 决策变量计算
遍历所有矩形,计算所有矩形相互之间的决策变量 δ i j \delta_{ij} δij的值并且求和。
Step4 结果导出
若 ∑ i = 1 223 ∑ j = 1 , 223 δ i j > = 1 \sum_{i=1}^{223}\sum_{j=1,}^{223}\delta_{ij}>=1 ∑i=1223∑j=1,223δij>=1则退出循环,若不满足则继续更新时间为 t n e w = t n o w + Δ t t_{new}=t_{now}+\Delta t tnew=tnow+Δt,继续计算,直至满足条件。