Skip to content

ChidcGithub/Physics-Engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Physics Engine - 超真实3D物理引擎

作者: Physics Chidc
版本: 0.1-pre

一个用Python实现的超真实3D物理引擎,包含刚体动力学、分子动力学模拟、碰撞检测和3D可视化。

特性

🎯 核心功能

  • 刚体动力学:完整的刚体运动模拟,支持质量、惯性张量、摩擦、恢复系数
  • 碰撞检测:支持球体、长方体、胶囊体等基本形状,使用GJK/SAT算法
  • 碰撞响应:基于冲量的碰撞解析,支持摩擦和恢复系数
  • 分子动力学:原子级模拟,支持多种力场(Lennard-Jones、Coulomb等)
  • 3D可视化:基于OpenGL的实时渲染,支持相机控制、光照、材质

🔧 技术架构

  • 数学库:自定义的Vector3、Matrix3、Quaternion类,避免万向节锁
  • 物理系统:模块化设计,支持多种积分器(Euler、Velocity Verlet)
  • 碰撞系统:宽相位(AABB)和窄相位(GJK/EPA)分离
  • 分子模拟:支持NVE、NVT、NPT系综,周期性边界条件
  • 渲染系统:实时OpenGL渲染,支持网格、材质、光照

📊 模拟能力

  • 宏观尺度:刚体碰撞、堆叠、关节约束
  • 微观尺度:分子运动、化学键、非键相互作用
  • 多尺度:支持宏观和微观的联合模拟

安装

系统要求

  • Python 3.8+
  • Windows/Linux/macOS
  • OpenGL兼容的显卡

安装步骤

  1. 克隆仓库:
git clone <repository-url>
cd PhysicsEngine
  1. 安装依赖:
pip install -r requirements.txt
  1. 安装引擎(开发模式):
pip install -e .

快速开始

运行演示

cd examples
python demo_physics.py

基本使用

from core.math import Vector3
from core.physics.rigid_body import RigidBody
from core.collision.collision_shape import SphereShape

# 创建刚体
body = RigidBody(
    mass=1.0,
    position=Vector3(0, 5, 0),
    linear_velocity=Vector3(0, 0, 0)
)

# 添加碰撞形状
body.collision_shape = SphereShape(radius=0.5, position=body.position)

# 创建物理世界
from core.collision.collision_response import PhysicsWorld
world = PhysicsWorld()

# 添加刚体
world.add_rigid_body(body)

# 模拟
for _ in range(100):
    world.step(0.016)  # 60 FPS

分子模拟

from molecular.molecule import Atom, AtomType, Molecule
from molecular.force_field import MolecularSimulator, ForceField, ForceFieldType

# 创建水分子
water = Molecule("Water")
oxygen = Atom(AtomType.OXYGEN, position=Vector3(0, 0, 0))
hydrogen1 = Atom(AtomType.HYDROGEN, position=Vector3(0.96e-10, 0, 0))
hydrogen2 = Atom(AtomType.HYDROGEN, position=Vector3(-0.96e-10, 0, 0))

water.add_atom(oxygen)
water.add_atom(hydrogen1)
water.add_atom(hydrogen2)

# 创建模拟器
simulator = MolecularSimulator(
    force_field=ForceField(ForceFieldType.LENNARD_JONES),
    temperature=300.0,
    timestep=1e-15
)

# 添加分子
simulator.add_molecule(water)

# 运行模拟
simulator.step(1000)

项目结构

PhysicsEngine/
├── core/                    # 核心引擎
│   ├── math/               # 数学库(向量、矩阵、四元数)
│   ├── physics/            # 物理系统(刚体动力学)
│   ├── collision/          # 碰撞系统(检测与响应)
│   └── constraints/        # 约束系统(待实现)
├── molecular/              # 分子动力学
│   ├── molecule.py         # 分子和原子类
│   ├── force_field.py      # 力场和模拟器
│   └── predefined_molecules.py # 预定义分子
├── rendering/              # 3D渲染
│   └── opengl_renderer.py  # OpenGL渲染器
├── utils/                  # 工具函数
├── examples/               # 示例程序
│   └── demo_physics.py     # 主演示程序
├── tests/                  # 测试
│   └── test_math.py        # 数学库测试
├── setup.py                # 安装脚本
├── requirements.txt        # 依赖列表
└── README.md              # 本文档

API文档

数学库

  • Vector3(x, y, z):3D向量
  • Matrix3():3x3矩阵
  • Quaternion(w, x, y, z):四元数
  • MathUtils:数学工具函数

刚体物理

  • RigidBody(mass, position, ...):刚体类
  • PhysicsWorld():物理世界管理器
  • RigidBodySystem():刚体系统(简化版)

碰撞系统

  • CollisionShape:碰撞形状基类
  • SphereShape(radius):球体
  • BoxShape(half_extents):长方体
  • CapsuleShape(radius, height):胶囊体
  • CollisionDetector():碰撞检测器
  • CollisionResolver():碰撞解析器

分子动力学

  • Atom(atom_type, position, ...):原子
  • Molecule(name):分子
  • Bond(atom1, atom2, ...):化学键
  • ForceField(force_field_type):力场
  • MolecularSimulator():分子模拟器

渲染系统

  • OpenGLRenderer(width, height):OpenGL渲染器
  • PhysicsVisualizer(renderer):物理可视化器
  • Mesh(vertices, indices):网格数据

示例

示例1:刚体堆叠

# 创建地面
ground = RigidBody(mass=0, position=Vector3(0, -2, 0))
ground.collision_shape = BoxShape(half_extents=Vector3(5, 0.5, 5))

# 创建堆叠的立方体
for i in range(5):
    box = RigidBody(mass=1.0, position=Vector3(0, i * 1.0, 0))
    box.collision_shape = BoxShape(half_extents=Vector3(0.5, 0.5, 0.5))
    world.add_rigid_body(box)

示例2:分子溶液

# 创建水分子系统
builder = MolecularSystemBuilder()
builder.create_solution(
    solvent_type="water",
    solute_type="nacl",
    solvent_count=100,
    solute_count=10,
    box_size=Vector3(3e-9, 3e-9, 3e-9)
)

# 创建模拟器
simulator = MolecularSimulator(temperature=300.0)
for molecule in builder.molecules:
    simulator.add_molecule(molecule)

# 运行模拟
simulator.step(10000)

示例3:自定义渲染

# 创建渲染器
renderer = OpenGLRenderer(1280, 720)

# 绘制球体
renderer.draw_sphere(Vector3(0, 0, 0), 1.0, (1, 0, 0))

# 绘制立方体
renderer.draw_cube(Vector3(3, 0, 0), Vector3(1, 1, 1), (0, 1, 0))

# 绘制坐标轴
renderer.draw_axes(length=2.0)

性能优化

刚体物理

  • 使用睡眠机制减少计算量
  • AABB宽相位碰撞检测
  • 接触持久化和热启动

分子动力学

  • Verlet邻居列表优化
  • 截断势能和切换函数
  • 周期性边界条件

渲染

  • 顶点缓冲对象(VBO)
  • 显示列表缓存
  • 细节层次(LOD)支持

扩展开发

添加新的碰撞形状

  1. 继承CollisionShape基类
  2. 实现get_support_point()compute_aabb()方法
  3. CollisionDetector中添加检测逻辑

添加新的力场

  1. 创建新的ForceField子类
  2. 实现calculate_pair_energy()calculate_pair_force()方法
  3. MolecularSimulator中集成

添加新的渲染效果

  1. 扩展OpenGLRenderer
  2. 实现新的着色器程序
  3. 添加材质和纹理支持

测试

运行测试套件:

cd tests
python test_math.py

测试覆盖:

  • 数学库(向量、矩阵、四元数)
  • 刚体运动学
  • 碰撞检测
  • 分子力场

路线图

短期目标

  • 实现关节约束(铰链、滑块、球窝)
  • 添加软体物理模拟
  • 实现流体动力学(SPH方法)
  • 添加更多分子力场(CHARMM、AMBER)
  • 优化渲染性能(实例化渲染)

长期目标

  • GPU加速计算(CUDA/OpenCL)
  • 多线程并行模拟
  • 网络多人物理
  • VR/AR支持
  • 机器学习增强

贡献指南

  1. Fork仓库
  2. 创建特性分支
  3. 提交更改
  4. 推送到分支
  5. 创建Pull Request

代码规范

  • 遵循PEP 8编码规范
  • 添加类型注解
  • 编写单元测试
  • 更新文档

许可证

MIT License

致谢

  • 感谢所有开源物理引擎的启发
  • 特别感谢分子动力学社区的开源工具
  • 感谢OpenGL和Pygame社区

联系方式

如有问题或建议,请通过以下方式联系:

  • 提交Issue
  • 创建Pull Request
  • 发送邮件

开始构建你的物理世界吧! 🚀

About

A physical engine that provides basic simulations

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages