桌球碰撞
发表于|更新于|程设
|总字数:339|阅读时长:1分钟|浏览量:
引入
在3B1B的一期视频中讲到了一种运用镜像对称来化简桌球的碰撞问题,那么能不能求这样一个问题:
在不考虑摩擦、转动的桌球上,已知入射点位置和方向,能否找到某个次数p,使得在p次与台面边缘的碰撞后回到出发点?
建模
由于桌球是圆的,所以碰撞时桌球与台面接触的边界是圆弧,因此我们考虑圆心与台面接触的边界,即圆心与台面接触的圆弧。
这里我们先考虑一般的情况,即桌球与台面的边界斜碰,而桌球与台面正碰以及与边界的角正碰都必有碰撞次数1使得桌球返回原点。
我们不妨先考虑长为a、宽为b的桌球台面,其边界即为碰撞边界,某个球在 \( \left ( x_{0}, y_{0} \right ) \) 的位置,其入射向量为 \( \vec{s} = \left ( u_{0}, v_{0} \right ) \) 如图建立坐标系:
考虑多次反弹后有以下模型:
当桌球与任意边界碰撞时,以该边界为对称轴,作其边界的镜像,桌球与该边界碰撞后,其位置与入射向量均变为镜像的对应值,即:
本文还在施工,未完待续…
文章作者: Meta Xiao
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 浮生若梦!
相关推荐
2025-09-08
abc422 my Solution
这次的abc打的很愉快,记录下。 AA题就是输入输出题,直接模拟即可。 12345678910111213141516171819202122#pragma GCC optimize("O2")#pragma GCC optimize("O3")#pragma GCC optimize("Ofast")#pragma GCC optimize("unroll-loops")#include <bits/stdc++.h>using namespace std;#define endl '\n'int a,b;char c;int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> a >> c >> b; if(b==8)cout << a+1 << c << 1; else cout <<...

2025-03-15
复刻三国杀
开始: 1v1 游戏规则比赛规则所谓 KOF 赛制,指的就是在竞技比赛过程中,两队人马轮番派人上阵较量,输者败后离场,换队内其他战友上阵,直至某队无人可上为止,从而分出胜负。 比赛用牌 武将牌:三国杀 1V1 竞技比赛使用“标准版”25 名武将+“神话再临-风”7 名武将(为保证比赛的公平性,不使用神武将、孙权、华佗、曹操)共 30 名武将,比赛中不能使用主公技 卡牌:三国杀“标准版”卡牌,2 张闪电牌如果是 判定牌 立即生效,若果是手牌当一张必须重置的 铁索连环 使用, 共 104 张卡牌 身份抽选将主公及内奸的身份牌随机给予玩家抽选,依此决定对战的身份。 主公:拥有优先选将的特权 内奸:拥有先手出牌的特权 选将阶段 随机选出 10 名武将,按 6 名武将正面向上,4 名武将背面向上的方式展示给玩家。 主公身份的玩家先手选将,按照 122221 的顺序选(即先手玩家选 1 个,后后手玩家选 2 个,然后先手玩家再选 2 个,依照此循序选择武将),正面向上及背面向上的武将均可选择。 选将完毕后,双方各自从手里的 5 名武将中选择 3...

2025-03-29
校赛G题题解
需要提前知道的知识点积 \vec{a} \cdot \vec{b} = |\vec{a}| |\vec{b}| \cos \theta其中 $\theta$ 是两个向量之间的夹角。 叉积 \vec{a} \times \vec{b} = |\vec{a}| |\vec{b}| \sin \theta \vec{n}其中 $\theta$ 是两个向量之间的夹角,$\vec{n}$ 是 $\vec{a}$ 和 $\vec{b}$ 所在平面的法向量。 那么可以用行列式表达为: \vec{a} \times \vec{b} = \begin{vmatrix} \vec{i} & \vec{j} & \vec{k} \\ a_x & a_y & a_z \\ b_x & b_y & b_z \end{vmatrix}这个行列式可以展开为: \vec{a} \times \vec{b} = (a_y b_z - a_z b_y) \vec{i} - (a_z b_x - a_x b_z) \vec{j} + (a_x b_y - a_y b_x)...

2025-03-24
洛谷题解--记3月24日训练
题目1P2241 统计方形(数据加强版)题目背景:1997年普及组第一题 题目描述有一个 $n \times m$ 方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。 输入格式: 一行,两个正整数 $n,m$($n \leq 5000,m \leq 5000$)。 输出格式: 一行,两个正整数,分别表示方格包含多少正方形、长方形(不包含正方形)。 输入输出样例 #1输入 #1 12 3 输出 #1 18 10 题解方法1数学公式求解 思路首先,我看到这题就回忆起了高中的排列组合,对于一个 $n \cdot m$ 的棋盘,我们可以把它看作n行m列。 选择其中的行列做正方形,那么对于边长为 $k$ 的正方形,对于 $n$ 行有 $n-k+1$ 总选择,对于 $m$ 列有 $m-k+1$ 总选择,所以边长为 $k$ 的正方形有 $(n-k+1) \cdot (m-k+1)$ 个。 那么,求出所有的正方形应该是在一个正方形棋盘中划分,这个正方形棋盘的边长显然是 $min(m,n)$ ,所以正方形的个数就是 $\sum_{i=1}^{min(m,n)}(n-i+1) \cdot...

2025-05-30
牛客小白月赛117题解
明天是端午放假,先祝大家端午快乐,今天来水一下月赛。比赛链接牛客小白月赛117 A题目大意题目要求判断一个字符串(内容为26个大小写字母)是否对于任意一个字符,其大写及小写字母均出现。 样例 样例输入 样例输出 1 4 abAB YES 2 2 ab NO 思路我们可以用一个数组来记录每个字符是否出现,然后判断每个字符的大写及小写是否均出现即可。 代码12345678910111213141516171819202122232425262728293031323334#include <bits/stdc++.h>using namespace std;int n;string s;map<char,int> cnt;int n;string s;map<char,int> cnt;int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> s; for(int i=0; i<n;...