Skip to content

benny1213/go-donut

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-donut

image-20210116000044645

参考


获取终端高宽详情

donut显示原理

获取控制台窗口大小


由于控制台中的字符高宽不是1:1,所以打印字符的时候需要使用到控制台的 行数与高度像素的比值 和 列数与宽度像素的比值。

代码中使用了 "golang.org/x/sys/unix"包来获取上述比值。

如何画出一个donut


donut是通过一个圆绕着一个圆外的轴旋转 $2\pi$ 而成, 如图:

坐标演示 所以圆的公式为: 圆的公式

环是由圆绕着y轴旋转而来,所以可以使用y轴旋转矩阵计算:

绕y轴旋转

如果需要绕着x轴和z轴也旋转,那么,环的公式就变成了(其中A,B为自定义的旋转角):

三轴旋转

化简得:

化简

从 0 转到 , 选定A、B的值,再将(x,y,z)坐标填上字符就可以得到一个donut了!

添加光影


​ 要给donut添加上阴影,添加一个光源并且计算出donut上每个点朝向光源的程度、添加上对应光强的字符就可以了。

​ 首先,我们先确定光线的方向,例如(0,1,-1)-从视角的顶上往下照射。计算面向量(平面圆上点的向量乘以三个对应的旋转矩阵):

面向量

然后再计算donut上每个点所在面上的法向量 N 与光线向量的内积L ( ):

流明计算

L<0说明该点背向光线,L>0说明该点朝向光线且L的大小代表光线强度

​ 最后我们用 .,-~:;=!*#$@ 这几个符号代表光强即可勾勒出donut上的光影

About

go语言写的一个甜甜圈控制台程序

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages