绘制一朵樱花

模板

代码:

#define _USE_MATH_DEFINES
#include<cmath>

	HGDIOBJ hPen;
	HGDIOBJ hPenOld;
	static POINT skrcenter = {600, 300};
	static int skrvertex = 90;
	static int skrvertexex = 120;
	static int skrpetal = 150;
	static int skrpetalex = 90;
	static double skrota = -M_PI / 2;
	const static double ccrota = M_PI/5;
	POINT skroutline[10][4];
	
	switch (uMsg)
	{
	case WM_PAINT:
        ……
		x = xChar * xPos;//横坐标 - x
		y = yChar * yPos;//纵坐标 - y
		hPen = CreatePen(PS_SOLID, 10, RGB(245, 155, 195));
		hPenOld = SelectObject(hdc, hPen);
		
		//确定bezier曲线基准点
		for (int i = 0;i < 5; i++) 
		{
			skroutline[2 * i][0].x = skrpetal * cos(double(2 * i * ccrota) + skrota) + skrcenter.x - x;
			skroutline[2 * i][0].y = skrpetal * sin(double(2 * i * ccrota) + skrota) + skrcenter.y - y;
			skroutline[2 * i][1].x = (skrpetal + skrpetalex) * cos(double(2 * i * ccrota) + skrota) + skrcenter.x - x;
			skroutline[2 * i][1].y = (skrpetal + skrpetalex) * sin(double(2 * i * ccrota) + skrota) + skrcenter.y - y;
			skroutline[2 * i][2].x = (skrvertex + skrvertexex) * cos(double((2 * i + 1) * ccrota) + skrota) + skrcenter.x - x;
			skroutline[2 * i][2].y = (skrvertex + skrvertexex) * sin(double((2 * i + 1) * ccrota) + skrota) + skrcenter.y - y;
			skroutline[2 * i][3].x = skrvertex * cos(double((2 * i + 1) * ccrota) + skrota) + skrcenter.x - x;
			skroutline[2 * i][3].y = skrvertex * sin(double((2 * i + 1) * ccrota) + skrota) + skrcenter.y - y;

			skroutline[2 * i + 1][0].x = skrvertex * cos(double((2 * i + 1) * ccrota) + skrota) + skrcenter.x - x;
			skroutline[2 * i + 1][0].y = skrvertex * sin(double((2 * i + 1) * ccrota) + skrota) + skrcenter.y - y;
			skroutline[2 * i + 1][1].x = (skrvertex + skrvertexex) * cos(double((2 * i + 1) * ccrota) + skrota) + skrcenter.x - x;
			skroutline[2 * i + 1][1].y = (skrvertex + skrvertexex) * sin(double((2 * i + 1) * ccrota) + skrota) + skrcenter.y - y;
			skroutline[2 * i + 1][2].x = (skrpetal + skrpetalex) * cos(double(2 * (i + 1) * ccrota) + skrota) + skrcenter.x - x;
			skroutline[2 * i + 1][2].y = (skrpetal + skrpetalex) * sin(double(2 * (i + 1) * ccrota) + skrota) + skrcenter.y - y;
			skroutline[2 * i + 1][3].x = skrpetal * cos(double(2 * (i + 1) * ccrota) + skrota) + skrcenter.x - x;
			skroutline[2 * i + 1][3].y = skrpetal * sin(double(2 * (i + 1) * ccrota) + skrota) + skrcenter.y - y;
		}

		//使用bezier曲线绘制
		for (int i = 0; i < 10; i++)
		{
			PolyBezier(hdc, skroutline[i], 4);
		}

		SelectObject(hdc, hPenOld);
		DeleteObject(hPen);
        ……
        }

效果:

猜你喜欢

转载自www.cnblogs.com/eternalmoonbeam/p/10872191.html
今日推荐