Code Monkey home page Code Monkey logo

c-'s Introduction

Build Status

Simflow项目报告

注:此为项目报告,个人报告请移步docs文件夹。

项目介绍

本项目是一个基于物理的模拟游戏(Simflow)。我们将从描述现实世界的物理定律出发,比如流体方程、热方程等等,提供一个可交互的物理环境,达到寓教于乐的效果。

玩家可以向环境中任意地添加各种物质,其表现形式为1像素大小的粒子。物质的种类主要为粉尘、固体、液体;最终我们在各个类别下各添加了一种比较典型物质,分别是沙、铁、水。同时,物质之间可以产生相互作用,主要为物理上的交互(碰撞、传热等),我们尽可能地还原其在现实中的行为,比如气体、液体的运动遵循流体方程,物质间传热遵循温度方程等。

总得来说,本项目即为游戏化的科学计算,其计算内容、计算方式与科学计算大体相似。但正因为是游戏,需要追求实时性,因此会有相应的妥协与权衡。

开发环境、工具

  • 本项目基于C++17

  • 本项目使用了ImGui框架、OpenGL来呈现界面与图形

  • 整体架构基于MVVM

  • 使用Travis-CI实现持续集成

分工情况

本项目的复杂度主要集中在Model层。考虑到这个特性,我们安排两人进行Model层、ViewModel层的开发,一人进行View层的开发。

  • 第一轮迭代由陈婉仪负责开发View层以显示粒子,钟嘉农负责搭建ViewModel层、Model层处理粒子的基本逻辑,上官越负责实现对接NS方程的求解器(用于模拟空气流动的效果)。

  • 第二轮迭代由陈婉仪负责开发View层的操作面板,上官越负责Model层碰撞逻辑的优化,钟嘉农负责液体模拟的实现。

  • 第三轮迭代由钟嘉农负责开发View层的数据可视化图,上官越负责Model层的计算并行化,陈婉仪负责温度模拟的实现。

最终成果

粒子间交互

如下图,我们在空中释放了一堆沙子(黄),它们飘落到了固体(白)上,形成沙丘。

气流解算

如下图,我们在画布中添加了一些水(浅蓝)。这些粒子之所以形成这个形状,是因为气流的作用。

注意到右下角的气压图,红色为正压区,蓝色为负压区。大堆下落粒子的下方,空气受挤压,呈正压(红色);而下落粒子带动空气流动,在两侧形成环流,环流中心呈负压(蓝色)。这是解算NS方程的结果。

液体效果

如下图,我们先用固体构建了一个容器,再在右上方添加了一些水。水顺容器壁留下,最终形成了稳定的液面。

温度解算

如下图,我们添加了一块固体,并加热了它的左上角。

观察程序右下方的温度图,红色为高温,蓝色为低温。我们加热了这块固体的左上角,此时温度正在向其他部分传播,呈现出了温度梯度。这是解算温度方程的结果。

小组成员

  • 钟嘉农(组长)

  • 陈婉仪

  • 上官越

c-'s People

Contributors

ersula avatar zhongjn avatar zoew420 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.