#include<stdio.h>#include<math.h>#include<windows.h>#include<tchar.h>floatf(float x,float y,float z){float a = x * x +9.0f/4.0f* y * y + z * z -1;return a * a * a - x * x * z * z * z -9.0f/80.0f* y * y * z * z * z;}floath(float x,float z){for(float y =1.0f; y >=0.0f; y -=0.001f){if(f(x, y, z)<=0.0f){return y;}}return0.0f;}intmain(){system("color 0c");HANDLE o =GetStdHandle(STD_OUTPUT_HANDLE);_TCHAR buffer[25][80]={_T(' ')};_TCHAR ramp[]=_T(".:-=+*#%@");for(float t =0.0f;; t +=0.1f){int sy =0;float s =sinf(t), a = s * s * s * s *0.2f;for(float z =1.3f; z >-1.2f; z -=0.1f){_TCHAR* p =&buffer[sy++][0];float tz = z *(1.2f- a);for(float x =-1.5f; x <1.5f; x +=0.05f){float tx = x *(1.2f+ a), v =f(tx,0.0f, tz);if(v <=0.0f){float y0 =h(tx, tz), ny =0.01f, nx =h(tx + ny, tz)- y0, nz =h(tx, tz + ny)- y0, nd =1.0f/sqrtf(nx * nx + ny * ny + nz * nz), d =(nx + ny - nz)* nd *0.5f+0.5f;*p++= ramp[(int)(d *5.0f)];}else{*p++=' ';}}}for(sy =0; sy <25; sy ++){COORD coord ={0, sy };SetConsoleCursorPosition(o, coord);WriteConsole(o, buffer[sy],79,NULL,0);}Sleep(33);}return0;}