心形图案 c代码

有些人会一直刻在记忆里的,即使忘记了他的声音,忘记了他的笑容,忘记了他的脸,但是每当想起他时的那种感受,是永远都不会改变的。

#include<stdio.h>
#include<math.h>
#include<windows.h>
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Buffer size for console window titles.
	HWND hwndFound; // This is what is returned to the caller.
	char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
	char pszOldWindowTitle[MY_BUFSIZE]; // Contains original

	GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);//获取控制台标题存入pszOldWindowTitle中
	//设置控制台的标题为 时间数 进程ID
	wsprintf(pszNewWindowTitle, "%d/%d",//把获取的数目,和当前进程ID输出到缓冲区pszNewwindowtitle中
		GetTickCount(),//用于获取操作系统启动后的毫秒数
		GetCurrentProcessId());//获取当前进程ID

	SetConsoleTitle(pszNewWindowTitle);//更改控制台的标题为新内容

	Sleep(40);

	hwndFound = FindWindow(NULL, pszNewWindowTitle);//获取控制台的HWND号

	SetConsoleTitle(pszOldWindowTitle);//更改控制台的标题为原始内容

	return(hwndFound);//返回句柄
}


void drawXY()//绘制X和Y轴
{
	HWND hWnd = GetConsoleHwnd();//获取控制台窗口句柄,用于设置画笔颜色
	HDC hDC = GetDC(hWnd);
	COORD dwSize;//记录窗体大小,用于设定坐标轴远点
	HPEN hNewPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));//创建画笔对象
	HPEN hOldPen = (HPEN)SelectObject(hDC, hNewPen);//选取画笔对象进行绘图
	CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口信息
	HANDLE Hout = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄
	GetConsoleScreenBufferInfo(Hout, &bInfo);//获取控制台信息
	dwSize = bInfo.dwMaximumWindowSize;//获取窗口大小,此时获得的是字符模式下
	//从字符到图像放大坐标轴8倍
	dwSize.X *= 8;
	dwSize.Y *= 8;
	SetBkMode(hDC, TRANSPARENT); SetTextColor(hDC, 255 * 255);
	//绘制X轴各个特殊坐标
	TextOut(hDC, dwSize.X - 15, dwSize.Y / 2 - 15, "X", 1);
	//Arc(hDC,100,100,300,300,350,500,350,500);//画圆 其中hDC表示画图句柄,100,100,300,300表示所使用的矩形区域,350,500表示画弧线的起点,350,500表明画弧线的终点 ; 
	//绘制Y轴各个特殊坐标
	TextOut(hDC, dwSize.X / 2, 0, "Y", 1);
	MoveToEx(hDC, 0, dwSize.Y / 2, NULL);
	LineTo(hDC, dwSize.X, dwSize.Y / 2);
	MoveToEx(hDC, dwSize.X / 2, 0, NULL);
	LineTo(hDC, dwSize.X / 2, dwSize.Y);
	ReleaseDC(hWnd, hDC);
}
void draw(double p)
{
	int i;
	double x, y;
	HWND hWnd = GetConsoleHwnd();//获取控制台窗口句柄,用于设置画笔颜色
	HDC hDC = GetDC(hWnd);
	COORD dwSize;//记录窗体大小,用于设定坐标轴远点
	HPEN hNewPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));//创建画笔对象
	HPEN hOldPen = (HPEN)SelectObject(hDC, hNewPen);//选取画笔对象进行绘图
	CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口信息
	HANDLE Hout = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄
	GetConsoleScreenBufferInfo(Hout, &bInfo);//获取控制台信息
	dwSize = bInfo.dwMaximumWindowSize;//获取窗口大小,此时获得的是字符模式下
	//从字符到图像放大坐标轴8倍
	dwSize.X *= 8;
	dwSize.Y *= 8;
	//MoveToEx(hDC,0,dwSize.Y/2,NULL);
	for (i = -180; i <= 180; i++)
	{
		x = 16 * pow(sin(i * 3.1415926 / 180), 3.0) * p;
		y = (13 * cos(i * 3.1415926 / 180) - 5 * cos(2 * i * 3.1415926 / 180) - 2 * cos(3 * i * 3.1415926 / 180) - cos(4 * i * 3.1415926 / 180)) * p;


		x = (x + 16) * dwSize.X / 32 / 2 + dwSize.X / 4;
		y = -y / 16 * dwSize.Y / 2.3 + dwSize.Y / 2;


		x = x;
		y = y;
		MoveToEx(hDC, x, y, NULL);
		LineTo(hDC, x + 1, y + 1);


	}
}


void main()
{
	double p;
	drawXY();
	for (p = 0.6; p <= 1; p = p + 0.01)
		draw(p);
	system("PAUSE");
}

效果图
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值