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