MFC-Mini-Billiards
MFC桌球小型交互式台球模拟游戏
查看 GitHub效果展示
项目介绍
MathChaosEngine 是一个用于展示分形与混沌系统的可视化项目, 当前实现了分形树生成,并支持参数控制与动态效果展示。
技术实现
- C++ 图形绘制
- 递归生成分形结构
- 随机参数控制自然效果
核心代码
// 碰撞检测
void CheckCollision()
{
for (size_t i = 0; i < balls.size(); i++)
{
for (size_t j = i + 1; j < balls.size(); j++)
{
Ball& a = balls[i];
Ball& b = balls[j];
if (!a.alive || !b.alive)
continue;
float dx = b.x - a.x;
float dy = b.y - a.y;
float dist2 = dx * dx + dy * dy;
float minDist = a.r + b.r;
if (dist2 >= minDist * minDist)
continue;
float dist = sqrt(dist2);
if (dist == 0)
dist = 0.01f;
// 法线
float nx = dx / dist;
float ny = dy / dist;
// 相对速度
float rvx = b.vx - a.vx;
float rvy = b.vy - a.vy;
float velAlongNormal = rvx * nx + rvy * ny;
// 如果正在远离,不处理
if (velAlongNormal > 0)
continue;
// 弹性碰撞(质量相同)
float impulse = -velAlongNormal;
a.vx -= impulse * nx;
a.vy -= impulse * ny;
b.vx += impulse * nx;
b.vy += impulse * ny;
// 位置修正(防止黏住)
float overlap = minDist - dist;
float correction = overlap * 0.5f;
a.x -= nx * correction;
a.y -= ny * correction;
b.x += nx * correction;
b.y += ny * correction;
CreateFirework((a.x + b.x) * 0.5f, (a.y + b.y) * 0.5f);
}
}
}
项目收获
通过该项目,深入理解了递归结构与图形生成的关系, 并提升了对复杂系统可视化的设计能力。