一个基于 Svelte + TypeScript + Vite 的高性能物理模拟项目,展示了一个在旋转六边形内弹跳的小球,具有真实的重力、摩擦力和碰撞效果。
pnpm install
pnpm dev
访问 http://localhost:5173/
查看应用
pnpm build
pnpm preview
src/
├── lib/
│ └── HexagonBall.svelte # 主要的物理模拟组件
├── App.svelte # 应用主组件
├── app.css # 全局样式
└── main.ts # 应用入口
参数 | 范围 | 说明 |
---|---|---|
重力强度 | 0.1 - 1.0 | 控制小球下落加速度 |
旋转速度 | 0 - 3 | 六边形旋转速度(度/帧) |
摩擦系数 | 0.9 - 1.0 | 速度衰减因子 |
弹性系数 | 0.5 - 1.0 | 碰撞后的能量保持率 |
使用线圆相交算法检测小球与六边形边的碰撞:
function pointToLineDistance(point: Point, lineStart: Point, lineEnd: Point): number
function updatePhysics() {
// 应用重力
ball.vy += physics.gravity;
// 应用摩擦力
ball.vx *= physics.friction;
ball.vy *= physics.friction;
// 更新位置
ball.x += ball.vx;
ball.y += ball.vy;
// 检测碰撞
checkCollision();
}
欢迎提交 Issue 和 Pull Request 来改进这个项目!
MIT License - 详见 LICENSE 文件
享受物理模拟的乐趣! 🎯✨