代码下载地址:

http://pan.baidu.com/s/1eQjiETc

2015.8.11更新:

最近突然有一个想法:写一个程序,用来模拟太阳系的行星运动,甚至是任意星球的运动。感觉这个想法非常excited,所以就准备开始写。程序的名字就叫“星系模拟器”吧,或者也可以称作“拉普拉斯的长者?”,英文名Solar Simulator
为了避免写完后过一个月看不懂代码的悲剧重演,我准备把整个开发过程都记在这里。
工具:
①一只NOIP选手
②一台电脑
③稍有的物理学常识

2015.8.13更新:

首先说一下思路。
①每个物体都是一个质点,只考虑万有引力
②先假设所有物体都在二维平面上运动,三维的以后再说
③每个物体都用一个小点表示
④怎么模拟运动呢?最早想的是能不能用方程,然后我突然想到“三体问题没有解析解”这回事……果断大模拟
先解决“在屏幕上显示图形”这回事。毕竟作为一只NOIP选手,我以前写过的都是“黑白屏幕的傻X程序”。
先找了半天,找了两个备选方案:一是按着《C++图形与游戏编程基础》用Dark GDK,但它只兼容vs2008,而且功能非常受限。二是用DirectX,但找了找教程发现相当于学习windows编程,上来就给一堆乱码般的函数和类名跪了,写个显示亮点的小程序我至于吗我……
后来经光神指点,找到一个好东西:Easy Graphics Engine(EGE),主页http://tcgraphics.sourceforge.net/,在VS2015下的安装教程见http://www.jianshu.com/p/b12163e5a0b7
环境已备好(VS2015 Community+EGE),可以开始了。
EGE的函数名称啥的都很直白,我也不介绍了,主页里写的非常清楚。先写个“画东西”的小程序压压惊吧:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <graphics.h>
#include <time.h>
#include <cstdio>
#include <cmath>
using namespace std;int main() {//初始化一个200*200的图像区域initgraph(200, 200);//设置绘图颜色setcolor(WHITE);//画空心圆circle(100, 100, 3);//设置填充颜色setfillcolor(WHITE);//填充圆floodfill(100, 100,WHITE);//等待按任意键getch();//关闭图像closegraph();return 0;
}

效果图:
我们将用这样的“亮点”表示物体,当然屏幕肯定比200*200大。
EGE中,坐标(x,y)代表距离左边x,距离上边y,不要搞反了
EGE还可以画像素。画一个抛物线作为练习:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <graphics.h>
#include <time.h>
#include <cstdio>
#include <cmath>
using namespace std;#pragma warning(disable:4996)//无视掉freopen的警告const int gsize = 600;int main() {//打开图像initgraph(gsize, gsize);//绘图for (float x = 0, y = 0 ; y < gsize ; x+=0.001, y = x*x/500) {putpixel(int(x+0.5), int(y+0.5), WHITE);//画像素}//关闭图像getch();closegraph();return 0;
}

方程y=x^2/500

效果图:
接下来该画动图了。按照EGE官网上的教程,写了一个画动图的程序:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <graphics.h>
#include <time.h>
#include <cstdio>
#include <cmath>
using namespace std;#pragma warning(disable:4996)//无视掉freopen的警告void mainloop()//主循环
{//将线条和填充颜色设为白色setcolor(WHITE);setfillcolor(WHITE);float x = 0, y = 0;for (; is_run(); delay_fps(60))//每秒60帧{//cleardevice();//清屏y = x*x / 500.0;fillellipsef(x, y, 3, 3);//画以(x,y)为中心,长短轴均为3的椭圆x += 1.0;//更新x}
}int main(void)
{//设置初始化图形,差不多就是默认setinitmode(INIT_DEFAULT | INIT_NOFORCEEXIT);//初始化窗口initgraph(600, 600);//初始化随机种子randomize();//设置更新窗口模式,为手动模式setrendermode(RENDER_MANUAL);//主循环mainloop();//关闭窗口closegraph();return 0;
}

这是动态绘制上述抛物线的程序。

注意,每一帧绘制完成后我没有清屏,这意味着它将绘制出整条轨迹。
画到一半的效果图:

星系模拟器开发日志(一) 如何科学地用C++画图相关推荐

  1. [原创] CPS1模拟器开发日志

    这份文档里面详细地说明了我第一次开发的一个街机模拟器 CPS1 Debugger所经历的工作思路.开发次序及详细时间表,大致正好1个月,每天工作8小时.虽然工作已经暂告一段落了,但这份文档我一直留着, ...

  2. [原创] Neo.Geo 视频帧浏览器开发日志

    写给自己用的开发日志,纯粹理想+兴趣.为了偷懒,用C#写的,就不多说什么了,简介和过程都在WIP正文里:)以前也曾感叹过NRGx.Kawaks和Nebula等一流模拟器的精妙,但始终认为与其临渊羡鱼, ...

  3. 图像拼接小实验开发日志和笔记

    图像拼接小实验开发日志和笔记 bytian.zDecby \ tian.z \ Decby tian.z Dec - 202120212021 技术路线 1.1. 开发环境 1.2. 图像配准 1.2 ...

  4. cmodel模拟器开发

    cmodel模拟器开发 对于一个公司来说,产品的设计周期就是生命线,一般来说都会在设计功能级仿真的c-model后直接转向RTL设计. 在目前的技术下,做cycle-by-cycle的设计和直接RTL ...

  5. APL开发日志--2012-11-08

    以后作者在博客上在专栏记录 APL每天开发日志, 以记录APL最新进展. 2012-11-08 APL开发日志: ------------------------------------------- ...

  6. APL开发日志 -- 2013-03-02

    以后作者在博客上在专栏记录 APL每天开发日志, 以记录APL最新进展. 2013-03-02 APL开发日志: ------------------------------------------- ...

  7. ue4 无限地图_RPG游戏开发日志13:无限地图的实现

    写在前面 本项目同步上传于coding上,国内读者可以通过在coding下载项目. 也欢迎你加入我的UE4学习交流QQ群:872537977.如果你喜欢我写的文章,也希望你点赞.收藏.转发.谢谢! 如 ...

  8. APL开发日志--2012-11-26

    以后作者在博客上在专栏记录 APL每天开发日志, 以记录APL最新进展. 2012-11-26 APL开发日志: ------------------------------------------- ...

  9. .NET Core开发日志——配置

    .NET Core开发日志--配置 原文:.NET Core开发日志--配置 熟悉ASP.NET的开发者一定对web.config文件不陌生.在ASP.NET环境中,要想添加配置参数,一般也都会在此文 ...

最新文章

  1. 目标检测分割--BlitzNet: A Real-Time Deep Network for Scene Understanding
  2. Lucene Document getBoost(float) 和 setBoost(float)
  3. centos6.4修改网卡名
  4. css 选择器学习笔记
  5. Ov两款骁龙865手机即将发布:其中一款或低于2999元
  6. Java中操作SFTP服务器上的文件下载上传
  7. mysql Packet for query is too large (1185 1024)异常
  8. PHPStorm更换主题,调整背景和字体颜色
  9. 关于Cognos Netscape directory server的安装
  10. 如何查看python标准库_python标准库
  11. 动作捕捉软件系统有那么重要吗?
  12. 酷安uwp版|酷安uwp版客户端
  13. iOS-苹果官方开源网站;objc、Runloop、GCD、OC等开源代码
  14. html页面如何引用母版页,内容页面访问母版页控件的两种方法
  15. Vue与Spring boot基于RSA非对称加密进行前后端交互
  16. 漫画主动学习:人工智能居然被PUA了?
  17. 华师大 OJ 3055
  18. 画【Python折线图】的一百个学习报告(三、自动生成单一数据折线图)
  19. systemctl mask和systemctl disable有什么区别?
  20. Perl正则表达式详解

热门文章

  1. 自定义View-仿QQ运动步数进度效果
  2. java telnet端口_Java 实现 telnet命令 验证主机端口的连通性
  3. Java学习路线(进阶篇二)
  4. 255work 变量举一反三之1 饭馆菜单程序
  5. idea移动一行或一个方法的快捷键
  6. 2022伴随着互联网大裁员的是数字经济加大步伐,物联网平台作为数字化的枢纽,正在往IoT多系统数据融合与集成的趋势发展
  7. 视图几何三维重建实战系列之MVSNet
  8. python虚拟仿真_国家级大学生创新创业训练计划平台
  9. C语言中头文件怎么写?(本文来源网络,由黑乌鸦进一步完善)
  10. chrome 插件 页面请求转发_入门chrome插件开发教程和经验总结,一篇就搞掂!