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/

相关文章
|
6月前
|
编译器 Linux C语言
我的C++奇迹之旅相遇:支持函数重载的原理
我的C++奇迹之旅相遇:支持函数重载的原理
|
6月前
|
存储 分布式计算 安全
我的C++奇迹之旅:值和引用的本质效率与性能比较2
我的C++奇迹之旅:值和引用的本质效率与性能比较
|
6月前
|
编译器 C++
我的C++奇迹之旅:值和引用的本质效率与性能比较1
我的C++奇迹之旅:值和引用的本质效率与性能比较
|
6月前
|
存储 编译器 C语言
我的C++奇迹之旅:内联函数和auto关键推导和指针空值
我的C++奇迹之旅:内联函数和auto关键推导和指针空值
|
6月前
|
编译器 C语言 C++
【C++的奇迹之旅(二)】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例
【C++的奇迹之旅(二)】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例
|
6月前
|
存储 算法 程序员
2023,我与C/C++相遇的奇迹之年
2023,我与C/C++相遇的奇迹之年
|
6月前
|
自然语言处理 编译器 C语言
C++奇迹之旅(三):缺省参数与函数重载
C++奇迹之旅(三):缺省参数与函数重载
|
1天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
13 4
|
3天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
14 4
|
25天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
22 4