矩形内弹跳点轨迹:y关于x、θ、W、H的表达式推导
矩形内反弹抛射点的y坐标表达式推导
咱们来一步步拆解这个问题:给定宽为$W$、高为$H$的矩形($W>H$),从某条短边上取一点,以与底边夹角为$θ$($0<θ<90°$)的方向抛出,碰壁后遵循光的反射规律反弹,最终推导任意$x$位置对应的$y$坐标,覆盖0到无穷次反弹的情况。
核心思路:用镜像法简化反弹逻辑
直接计算每次反弹的坐标会非常繁琐,咱们用镜像法把问题转化为直线运动:每次碰到垂直墙(左右边,$x=0$或$x=W$),就把矩形沿垂直方向镜像复制;碰到水平墙(上下边,$y=0$或$y=H$),就沿水平方向镜像复制。这样,原矩形内的反弹路径,就对应镜像后矩形中的一条直线,这条直线的斜率和初始抛射角的正切值完全一致:tanθ = Δy/Δx。
步骤1:定义基础变量
先明确初始条件:
- 设初始抛射点在左侧短边的$(0, y₀)$位置($0<y₀<H$,$y₀$是初始点到底边的距离)
- 抛射方向与底边($x$轴正方向)的夹角为$θ$,因此直线的斜率为$tanθ$
步骤2:计算水平方向的等效距离
对于原矩形内任意$x$($0≤x≤+\infty$),先计算水平方向碰壁的次数:
- 令
q = floor(x / W):$q$是碰到垂直墙的总次数($q≥0$,整数) - 令
r = x % W:$r$是当前$x$在所在矩形内的水平偏移量($0≤r<W$)
根据$q$的奇偶性,确定等效的直线水平距离:
- 若$q$为偶数:说明当前处于**正向(向右)**的镜像矩形,等效水平距离就是$x$本身
- 若$q$为奇数:说明当前处于**反向(向左)**的镜像矩形,等效水平距离为
2qW - x(相当于从初始点走到第$q$次碰壁后,再反向走剩余距离的总长度)
步骤3:计算镜像后的y坐标
用等效水平距离计算镜像矩形中的直线y坐标:
y_mirror = y₀ + (x if q%2==0 else 2qW - x) * tanθ
步骤4:映射回原矩形的y坐标
现在需要把镜像中的$y_mirror$映射回原矩形的$0≤y≤H$范围:
- 令
p = floor(y_mirror / H):$p$是碰到水平墙的总次数($p≥0$,整数) - 令
s = y_mirror % H:$s$是当前$y_mirror$在所在矩形内的垂直偏移量($0≤s<H$)
根据$p$的奇偶性,确定原矩形内的$y$:
- 若$p$为偶数:直接取偏移量,即
y = s - 若$p$为奇数:取对称偏移量,即
y = H - s
最终整合表达式
把上述步骤整合,得到任意$x$对应的$y$坐标:
- 计算水平碰壁次数与偏移:
q = floor(x / W),r = x - q*W - 计算等效水平距离对应的镜像y:
y_mirror = y₀ + (x if q%2==0 else 2*q*W - x) * tanθ - 计算垂直碰壁次数与偏移:
p = floor(y_mirror / H),s = y_mirror - p*H - 映射回原矩形:
y = s if p%2==0 else H - s
特殊情况验证
- 0次反弹:当$q=0$且$y_mirror≤H$时,$y = y₀ + x*tanθ$,就是初始的直线抛射,符合预期
- 趋近90°的极端情况:$θ→90°$时,$tanθ→+\infty$,$y_mirror$会快速增大,$p$的取值也会快速增加,对应无穷次垂直反弹,符合题目描述
内容的提问来源于stack exchange,提问作者Powereleven
相关产品推荐
相关产品推荐

