动态爱心。

来源:互联网 发布:网络分流器厂家 编辑:程序博客网 时间:2024/04/29 00:04
#include<bits/stdc++.h>#include <windows.h>#include <tchar.h>float f(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;}float h(float x, float z){    for (float y = 1.0f; y >= 0.0f; y -= 0.001f) if (f(x, y, z) <= 0.0f) return y;    return 0.0f;}int main(){    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);        float 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);                float v = f(tx, 0.0f, tz);                if (v <= 0.0f)                {                    float y0 = h(tx, tz);                    float ny = 0.01f;                    float nx = h(tx + ny, tz) - y0;                    float nz = h(tx, tz + ny) - y0;                    float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);                    float 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);    }}

0 0