zoukankan      html  css  js  c++  java
  • 绘制一朵樱花

    模板

    代码:

    #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);
            ……
            }

    效果:

  • 相关阅读:
    __module__ 和 __class__
    __str__ 和 __repr
    __getitem__ __setitem__ __delitem__ 使用
    授权
    __getattr__ __delattr__ __setattr__ __getattribute__使用(重写python提供的错误信息)
    __import__
    hasattr getattr setattr delattr --> (反射)
    类三大特性(继承 多态 封装)
    静态方法@staticmethod
    类方法@classmethod
  • 原文地址:https://www.cnblogs.com/eternalmoonbeam/p/10872191.html
Copyright © 2011-2022 走看看