【作业1】A simple 2/3D N-Body system

作业1

作业描述

以N-Body和Galaxy为基础,使用metaprogramming和OOP练习实现了一套代码实现一个简单的2D or 3D N-Body系统,并加入了对某些变量和对GGUI中camera的探索控制窗。

效果展示

2D N-Body System
2D System
3D N-Body System
3D System

快捷键说明:

  1. SPACE:开始/暂停运行
  2. r:初始化重置所有星体
  3. c:初始化重置3D系统中的camera
  4. ESC:退出

问题

  1. Taichi kernel中,若一个field涉及不同维度下的不同长度,无法直接使用if-else通过判断分支使其长度不同。比如 if dim == 2: vel=[0, 0]; elif dim == 3: vel=[0,0,0]; 就会报错,在程序中我使用了赋值过程内的if-else解决,但是感觉不是很灵活和漂亮。这是由于kernel编译时,会同时检查所有分支中变量的长度,会出现不一致的情况。这个问题或许需要等到Taichi支持在kernel内部临时定义field才能解决?
  2. 3D camera中,track_user_inputs方法改变的只是对当前scene渲染到canvas的图像的camera,并非改变camera的pos和lookat值?应如何获取旋转后camera的pos、lookat等数值呢?以及程序中右键拖拽导致的图案变形比较严重,这种变形应该如何改善?

代码链接

请大家的作业使用我们提供的Github代码模板,使用模板会有惊喜哟!

Code

3 个赞