绘制一朵樱花
代码:
#define _USE_MATH_DEFINES
#include
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);
……
}