ASCII码模拟星系碰撞:牛顿引力定律融合C++的「奇迹」

简介: 继上次用SCII实现曾经「专属」Nvidia的光线追踪技术之后,作者又使用ASCII模拟了碰撞的星系,过程十分逼真。此外,他还发布了ASCII游戏、ASCII模仿鱼群等项目,心动了么?还不赶紧上手试试!

微信图片_20220112120249.png


还记得上次那个用ASCII实现光线追踪技术的国外小哥吗?


没错,他又有新动作了!


这次,他再一次使用ASCII码模拟了碰撞的星系,同样,全过程都是用C++实现的。


毫无疑问,这个最新的项目一经出现,就在Reddit上收揽了2.5K+热度。

 

下图就是星球即将碰撞的一瞬间


微信图片_20220112120251.png


此外,小哥还模仿了两颗星球在相反方向进行旋转的过程:


//

微信图片_20220112120254.png微信图片_20220112120256.png微信图片_20220112120258.png


用牛顿引力定律助力星系碰撞


这些神奇的效果是怎么实现的呢?


小哥在他的视频里简单介绍了一下基本的过程和原理:


微信图片_20220112120300.png


首先,使用牛顿引力定律,他实现了重力的模拟。


微信图片_20220112120302.png


使用这个公式,他就可以预测任何数量的物体的运动趋势:


微信图片_20220112120304.png微信图片_20220112120305.png


下图还模拟了日地月三个星球的运动状态:


微信图片_20220112120307.png


整个实验的代码地址:

github.com/DinoZ1729/Galaxy


微信图片_20220112120309.png


诸多项目妙趣横生,只有想不到没有做不到


除此之外,小哥还放上了另外三个项目的视频链接:

一个是「在c++控制台模拟10,000双摆」:

 

视频链接:

https://www.youtube.com/watch?v=DMOK5BS6KJw

 

下面是一个双摆的运动状态:


/

微信图片_20220112120310.png微信图片_20220112120313.png


下图是两个双摆:


微信图片_20220112120315.png


下面是10000个双摆的运动情况:


微信图片_20220112120317.png


这个项目是「Boids |模拟鱼类和鸟类的运动」:

 

视频链接:

https://www.youtube.com/watch?v=mev2cgRN9Zo


微信图片_20220112120321.png


下图是鱼群和鸟群的运动状态


微信图片_20220112120322.png


他使用了三种简单的规则来模拟运动状态:


微信图片_20220112120324.png


而没有了这三种规则的限制,情况会是下图这样:


微信图片_20220112120326.png


可以看出,在没有规则的限制下,运动轨迹会是完全混乱的。

 

此外,这个小哥还在他的github和youtube频道上持续更新最新的项目和视频,感兴趣的小伙伴可以前去持续关注哦!

 

参考链接:

https://www.reddit.com/r/programming/comments/l3f5v4/i_created_an_ascii_simulation_of_colliding/

相关文章
|
8月前
|
编译器 Linux C语言
我的C++奇迹之旅相遇:支持函数重载的原理
我的C++奇迹之旅相遇:支持函数重载的原理
|
8月前
|
存储 分布式计算 安全
我的C++奇迹之旅:值和引用的本质效率与性能比较2
我的C++奇迹之旅:值和引用的本质效率与性能比较
|
8月前
|
编译器 C++
我的C++奇迹之旅:值和引用的本质效率与性能比较1
我的C++奇迹之旅:值和引用的本质效率与性能比较
|
8月前
|
存储 编译器 C语言
我的C++奇迹之旅:内联函数和auto关键推导和指针空值
我的C++奇迹之旅:内联函数和auto关键推导和指针空值
|
8月前
|
编译器 C语言 C++
【C++的奇迹之旅(二)】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例
【C++的奇迹之旅(二)】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例
|
8月前
|
存储 算法 程序员
2023,我与C/C++相遇的奇迹之年
2023,我与C/C++相遇的奇迹之年
|
8月前
|
自然语言处理 编译器 C语言
C++奇迹之旅(三):缺省参数与函数重载
C++奇迹之旅(三):缺省参数与函数重载
|
2天前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
32 18
|
2天前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
30 13
|
2天前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
20 5