烟花

程序说明

  • 这是一个烟花的简单模拟程序,只考虑了重力。2D 环境。
  • 烟花分为上升过程以及爆炸过程 。
  • 使用 C++ 编写,firework 类表示烟花,其有 raise 代表上升过程,bomb list 代表的是爆炸颗粒集合。
  • 程序环境:VS2019、EasyX_20210115、C++11。

实现思路

  • 烟花的坐标就用真实世界的坐标,在绘画时候通过调整屏幕坐标方向以及缩放因子来完成坐标映射。
  • 烟花的速度以及烟花的位置每帧更新一次,每次更新基于两帧间的时间差值进行更新。
  • 绘画烟花尾部的小尾巴,我使用的是每帧对屏幕所有点的像素值进行平均。也就是把像素颜色与周围像素点颜色值求平均。

执行效果截图

源代码下载

点击这里下载源代码

热力学模拟实验(by 常数变易法)

这个程序是热力学模拟实验。

学热力学与统计物理的时候就想设计一个程序模拟气体分子的运动,这样就能直观地检测那些热力学公式的正确性。
这个程序设计成所有粒子之间的力都是斥力,粒子和边界之间也有斥力。粒子在二维平面运动。

程序的动态执行效果如下:

完整代码如下:

// 项目:热力学模拟实验
// 作者:常数变易法(QQ:1375989292)
// 时间:2019.12.19
// 环境:VC6.0

// 学热力学与统计物理的时候就想设计一个程序模拟气体分子的运动,这样就能直观地检测那些热力学公式的正确性。
// 这个程序设计成所有粒子之间的力都是斥力,粒子和边界之间也有斥力。粒子在二维平面运动。

// 版权:作者原创,无抄袭,不涉及版权问题,仅用作学习

#include <graphics.h>						// 引用图形库头文件
#include <stdio.h>
#include 
...

物理程序:引力模拟(by 有时的迷惘)

一个模拟引力的程序。可以在程序中创建不同质量和初始速度的天体,天体按照万有引力定律运行。

左键创建天体。按下左键不松开,天体质量会增加;然后移动,会给天体赋值初始速度,然后松开左键。

右键删除天体。

超出屏幕、碰撞后的天体不会消失。

程序的运行截图如下:

完整源代码、图片及编译后的可执行文件请【点击这里下载】。

作者:有时的迷惘
个人主页:www.baidu.com/p/有时的迷惘

力学:鼠标用弹簧挂着一串小方块

这个程序模拟了几个小方块用弹簧连接到鼠标上的效果。当鼠标在绘图窗口上移动时,可以看到小方块连续受力的效果。

动态程序就不再抓图了。源代码如下:

///////////////////////////////////////////////////
// 程序名称:力学:鼠标用弹簧挂着一串小方块
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20210730
// 移植作者:yangw80 <yw80@qq.com>
// 发布日期:2012-4-27
//
#include <graphics.h>
#include <math.h>
#include <time.h>

const	int		WIDTH = 640;		// 窗口宽
const	int		HEIGHT = 480;		// 窗口高
const	int		BOXCOUNT = 10;		// 方块的数量
const	int		BOXSIZE = 10;		
...

力学:模拟橡皮筋(by frxyz1)

一个模拟橡皮筋的程序。

执行效果:

以下是全部源代码:

///////////////////////////////////////////////////
// 程序名称:模拟橡皮筋
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20210730
// 作  者:frxyz1 <http://hi.baidu.com/frxyz1>
// 最后修改:2012-4-15
//
#include <graphics.h>
#include <conio.h>
#include <stdio.h>

#define NODES 20
#define GRAVITY 1
#define ITER 8

struct Vector
{
	float x, y;

	void operator += (Vector v) { x += v.x; y += v.y; }
	
...

力学:模拟弹力的小程序(by frxyz1)

一个模拟弹力的小程序,执行效果如下:

感兴趣的可以再加上几个小球,类似的还可以模拟出绳子的效果。

以下是全部源代码:

///////////////////////////////////////////////////
// 程序名称:模拟弹力的小程序
// 编译环境:Visual C++ 6.0 / 2010,EasyX 20120404(beta)
// 作  者:frxyz1 <http://hi.baidu.com/frxyz1>
// 最后修改:2012-4-14
//
#include <graphics.h>
#include <conio.h>

#define BALL_RADIUS 30 // 小球的半径

void main()
{
	initgraph(640, 480);
	setfillstyle(RGB(255, 0, 0));

	// 小球的初始位置
	float 
...

力学:流体(Liquid)(VC版本)

这个程序原本是测试 HTML 5 效果的一个演示程序,动态效果很是漂亮。现在,我把这个精彩的程序移植到了 VC 上。

以下是完整的 VC 源代码:

///////////////////////////////////////////////////
// 程序名称:流体(Liquid)
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20200727
// 原 作 品:http://spielzeugz.de/html5/liquid-particles.html (HTML5)
// 移植作者:krissi <zh@easyx.cn>
// 发布日期:2012-4-5
//
#include <graphics.h>
#include <math.h>
#include <time.h>


#define WIDTH		1024		// 屏幕宽
#define HEIGHT		576			// 屏幕高
#define 
...

力学:弹跳球模拟程序

本程序根据物理原理模拟一个球自由落体并持续弹跳的效果,小球只受重力影响,忽略空气阻力,反弹时能量损耗 10%。

程序源代码如下:

////////////////////////////////////////////////////////////////////
// 程序名称:物理反弹球模拟程序
// 编译环境:VC6.0 / 2019,EasyX_20210730
// 作  者:yw80@qq.com
// 最后修改:2012-3-29
//
#include <graphics.h>
#include <conio.h>

int main()
{
	double h = 300;				// 高度
	double v = 0;				// 速度(方向向下)
	double dv = 9.8 / 50;		// 加速度(每 1/50 秒)

	// 初始化绘图窗口
	initgraph(640, 480);

	// 画地平线
	line(100, 421, 
...