绘制一个简易爱心
#include
#include
int main()
{
for (float y = 1.5f; y > -1.5f; y -= 0.1f)
{
for (float x = -1.5f; x 1.5f; x += 0.05f)
{
float z = x * x + y * y - 1;
float f = z * z * z - x * x * y * y * y;
putchar(f 0.0f ? ".:-=+*#%@"[(int)(f * -8.0f)] : ' ');
}
putchar('n');
}
system("pause");
return 0;
}
绘制一个精致爱心
#include
#include
#include
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()
{
for (float z = 1.5f; z > -1.5f; z -= 0.05f)
{
for (float x = -1.5f; x 1.5f; x += 0.025f)
{
float v = f(x, 0.0f, z);
if (v 0.0f)
{
float y0 = h(x, z);
float ny = 0.01f;
float nx = h(x + ny, z) - y0;
float nz = h(x, z + ny) - y0;
float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
float d = (nx + ny - nz) * nd * 0.5f + 0.5f;
putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
}
else
putchar(' ');
}
putchar('n');
}
system("pause");
return 0;
}
另一个好的版本
#include
#include
#include
#include
#include
using namespace std;
double q,w,e,r,t,u,o,p,s,d,f,g,h,j,l,z,c,v,b,n,m,i;
double k,x,y;
long long a[1000][1000];
int main (int argc,char argv[])
{
Sleep(1000);
HWND hwnd=NULL;
RECT rect;
hwnd=GetForegroundWindow();
GetClientRect(hwnd,&rect);
if(hwnd!=NULL)
{
MoveWindow(hwnd,0,0,0,0,true);Sleep(20);
}
system("mode con cols=300 lines=150");
system("color f4");
for(i=40;i>=-32;i--)
{
for(j=-40;j40;j++)
{
y=i/30;
x=j/30;
if(pow(x*x+y*y-1,3)-x*x*y*y*y0)
{
cout"██";
}
else cout" ";
}
coutendl;
}
return 0;
}
一个最花里胡哨的
#include
#include
#include
#include
#include
using namespace std;
double q,w,e,r,t,u,o,p,s,d,f,g,h,j,l,z,c,v,b,n,m,i;
double k,x,y;
long long a[1000][1000];
int main()
{
system("mode con cols=100 lines=50");
system("color f4");
for(i=20;i>=-16;i--)
{
for(j=-20;j20;j++)
{
y=i/15;
x=j/15;
if(pow(x*x+y*y-1,3)-x*x*y*y*y0)
{
cout"██";
}
else cout" ";
}
coutendl;
}
Sleep(5000);
system("cls");
for(i=20;i>=-20;i--)
{
for(j=-20;j20;j++)
{
y=i/15;
x=j/15;
if(pow(x*x+y*y-1,3)-x*x*y*y*y0)
{
cout"爱";
}
else cout" ";
}
coutendl;
}
Sleep(5000);
system("cls");
for(i=20;i>=-20;i--)
{
for(j=-20;j20;j++)
{
y=i/15;
x=j/15;
if(pow(x*x+y*y-1,3)-x*x*y*y*y-0.8)
cout"康";
else if(pow(x*x+y*y-1,3)-x*x*y*y*y-0.6)
cout"喜";
else if(pow(x*x+y*y-1,3)-x*x*y*y*y-0.48)
cout"吉";
else if(pow(x*x+y*y-1,3)-x*x*y*y*y-0.32)
cout"寿";
else if(pow(x*x+y*y-1,3)-x*x*y*y*y-0.18)
cout"顺";
else if(pow(x*x+y*y-1,3)-x*x*y*y*y-0.1)
cout"安";
else if(pow(x*x+y*y-1,3)-x*x*y*y*y-0.06)
cout"乐";
else if(pow(x*x+y*y-1,3)-x*x*y*y*y-0.03)
cout"贵";
else if(pow(x*x+y*y-1,3)-x*x*y*y*y0)
cout"福";
else cout" ";
}
coutendl;
}
return 0;
}
绘制红心并保存到文件
#include
#include
#include
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()
{
FILE* fp = fopen("heart.ppm", "w");
int sw = 512, sh = 512;
fprintf(fp, "P3n%d %dn255n", sw, sh);
for (int sy = 0; sy sh; sy++)
{
float z = 1.5f - sy * 3.0f / sh;
for (int sx = 0; sx sw; sx++)
{
float x = sx * 3.0f / sw - 1.5f;
float v = f(x, 0.0f, z);
int r = 0;
if (v 0.0f)
{
float y0 = h(x, z);
float ny = 0.001f;
float nx = h(x + ny, z) - y0;
float nz = h(x, z + ny) - y0;
float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
float d = (nx + ny - nz) / sqrtf(3) * nd * 0.5f + 0.5f;
r = (int)(d * 255.0f);
}
fprintf(fp, "%d 0 0 ", r);
}
fputc('n', fp);
}
fclose(fp);
system("pause");
}
绘制跳动的心脏:注此版本只能在Windows系统下编译运行。
#include
#include
#include
#include
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);
}
}
升级版
include stdio.h>
include math.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() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0C);
HANDLE o = GetStdHandle(STD_OUTPUT_HANDLE);
_TCHAR buffer[25][80] = { _T(' ') };
_TCHAR ramp[] = _T(".:-=+*#%@");
int count= 0;
int count1=0;
//system("color F4");
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);
}
if(count 10){
printf("I Love You ———.Mua~n") ;//表白内容
printf(" By 编程爱我");// 表白者的名字
count++;
} else{
printf("You Are My Best Lover.n");
printf(" Stephen Ge");
count++;
if(count>=20){
count =0;
}
}
Sleep(33);
}
}
其他做法html
doctype html>
html lang="en">
head>
meta charset="UTF-8">
head>
body>
canvas width="400" height="400">canvas>
script>
var canvas = document.querySelector('canvas');
var context = canvas.getContext('2d');
context.lineWidth = 3;
// 将画布的原点(0,0),移动到(200,200)
// 移动原点是为了能让整个心形显示出来
context.translate(200,200);
// t 代表弧度
var t=0;
// maxt 代表 t 的最大值
var maxt = 2*Math.PI;
// vt 代表 t 的增量
var vt = 0.01;
// 需要循环的次数
var maxi = Math.ceil(maxt/vt);
// 保存所有点的坐标的数组
var pointArr=[];
// x 用来暂时保存每次循环得到的 x 坐标
var x=0;
// y 用来暂时保存每次循环得到的 y 坐标
var y=0;
// 根据方程得到所有点的坐标
for(var i=0;imaxi;i++){
// x=a*(2*sin(t)+sin(2*t))
x=50*(2*Math.sin(t)+Math.sin(2*t));
// y=a*(2*cos(t)+cos(2*t))
y=50*(2*Math.cos(t)+Math.cos(2*t));
t+=vt;
pointArr.push([x,y]);
}
// 根据点的坐标,画出心形线
context.moveTo(pointArr[0][0],pointArr[0][1]);
draw();
function draw(){
context.fillStyle='#c00';
// 把每个点连接起来
for(var i=1;ipointArr.length;i++){
x = pointArr[i][0];
y = pointArr[i][1];
context.lineTo(x,y);
}
context.fill();
}
script>
body>
html>
doctype html>
html lang="en">
head>
meta charset="UTF-8">
head>
body>
canvas width="400" height="400">canvas>
script>
var canvas = document.querySelector('canvas');
var context = canvas.getContext('2d');
// 将画布的原点(0,0),移动到(200,100)
// 移动原点是为了能让整个心形显示出来
context.translate(200, 100);
// 画心形
draw();
function draw() {
// 画圆弧时,圆的半径
var r = 0;
// start 代表画弧线时的 起始角
var start = 0;
// end 代表画弧线时的 结束角
var end = 0;
// 一个常数,用来控制心形的大小
var a = 100;
context.fillStyle = '#e21f27';
//连续的画圆弧
for (var q = 0; q 500; q++) {
start += Math.PI * 2 / 500;
// 当 结束角 是 Math.PI * 2 时也就是已经画了一圈了,心形就出来了
end = start + Math.PI * 2 / 500;
// 根据极坐标方程 r=a(1+sinθ),得到 r(半径)
r = a * (1 + Math.sin(start));
// 画弧线
context.arc(0, 0, r, start, end, false);
}
context.fill();
}
script>
body>
html>
doctype html>
html lang="en">
head>
meta charset="UTF-8">
head>
body>
canvas width="400" height="400">canvas>
script>
var canvas = document.querySelector('canvas');
var context = canvas.getContext('2d');
context.lineWidth = 3;
// 将画布的原点(0,0),移动到(200,200)
// 移动原点是为了能让整个心形显示出来
context.translate(200,200);
// t 代表弧度
var t=0;
// vt 代表 t 的增量
var vt = 0.01;
// maxt 代表 t 的最大值
var maxt = 2*Math.PI;
// 需要循环的次数
var maxi = Math.ceil(maxt/vt);
// 保存所有点的坐标的数组
var pointArr=[];
// 控制心形大小
var size = 10;
// x 用来暂时保存每次循环得到的 x 坐标
var x=0;
// y 用来暂时保存每次循环得到的 y 坐标
var y=0;
// 根据方程得到所有点的坐标
for(var i=0;imaxi;i++){
// x=16 * (sin(t)) ^ 3;
var x = 16 * Math.pow(Math.sin(t),3);
// y=13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t)
var y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) -2 * Math.cos(3 * t)- Math.cos(4 * t);
t+=vt;
pointArr.push([x*size,-y*size]);
}
// 根据点的坐标,画出心形线
context.moveTo(pointArr[0][0],pointArr[0][1]);
draw();
function draw(){
context.fillStyle='#c00';
// 把每个点连接起来
for(var i=1;ipointArr.length;i++){
x = pointArr[i][0];
y = pointArr[i][1];
context.lineTo(x,y);
}
context.fill();
}
script>
body>
html>
也许我们还可以再做点什么,比如加点动画,看看下面这个吧。
点这里下载源码,里面已经加了很详细的注释了。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: Amazon电商、音乐、云服务不分家,亚马逊云科技告诉你如何巧用全球业务体系占据80%中国企业出海市场
花木兰为啥“东市买骏马,西市买鞍鞯”?在半年一度的6.18电商购物节里,大家可能会说:“因为没有跨店满减”……但事实是,如果东市都可以把骏马、鞍鞯买齐是怎样的一种体验?亚马逊云科技就可以做到,作为占据80%中国企业出海市场的亚马逊云科技,其覆盖全球的业务体系,…