基于 的字符生产与旋转算法实现
本文程序的实现的 是 。
一、新建项目
此处就不再赘述,没有 基础可以先看第一个 的程序。
设置项目名为 。
二、类初始化
在 文件下,我们在它的类里定义如下成员变量和函数成员。
public:
BOOL CharStorgeMatrix[26][8][8];
void InitCharStorgeMatrix();
void DrawChar(LONG posX, LONG posY, ULONG CharID, DWORD color, int size, int angle);
POINT MakeMatrix(LONG posX, LONG posY, int angle);
三、宏设置与头文件补充
在 文件下完成。
#include"math.h"
#define PI 3.14159265
四、字符矩阵初始化
在 文件下完成。
void CGenerateCharacterView::InitCharStorgeMatrix() {
int i, j, k;
for (i = 0; i < 26; i++)
for (j = 0; j < 8; j++)
for (k = 0; k < 8; k++)
CharStorgeMatrix[i][j][k] = 0;
for (i = 0; i < 5; i++)
CharStorgeMatrix[1][0][i] = 1;
for (i = 1; i <= 2; i++)
CharStorgeMatrix[1][1][i] = 1;
for (i = 4; i <= 5; i++)
CharStorgeMatrix[1][1][i] = 1;
for (i = 1; i <= 2; i++)
CharStorgeMatrix[1][2][i] = 1;
for (i = 4; i <= 5; i++)
CharStorgeMatrix[1][2][i] = 1;
for (i = 1; i <= 2; i++)
CharStorgeMatrix[1][3][i] = 1;
CharStorgeMatrix[1][3][i] = 1;
for (i = 1; i <= 5; i++)
CharStorgeMatrix[1][4][i] = 1;
for (i = 1; i <= 2; i++)
CharStorgeMatrix[1][5][i] = 1;
for (i = 4; i <= 5; i++)
CharStorgeMatrix[1][5][i] = 1;
for (i = 1; i <= 2; i++)
CharStorgeMatrix[1][6][i] = 1;
for (i = 4; i <= 5; i++)
CharStorgeMatrix[1][6][i] = 1;
for (i = 0; i < 5; i++)
CharStorgeMatrix[1][7][i] = 1;
}
五、画字符函数实现
在 文件下完成。
void CGenerateCharacterView::DrawChar(LONG posX, LONG posY, ULONG CharID, DWORD color, int size, int angle) {
CDC *pDC = GetDC();
int i, j, k, h;
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
if (CharStorgeMatrix[CharID][i][j] == 1) {
for(k=0;k<size;k++)
for (h = 0; h < size; h++) {
POINT pp = MakeMatrix((j - 1)*size + k, (i - 1)*size + h, angle);
pDC->SetPixel(posX + pp.x, posY + pp.y, color);
}
}
}
}
ReleaseDC(pDC);
}
六、求转置矩阵函数实现
在 文件下完成。
POINT CGenerateCharacterView::MakeMatrix(LONG posX, LONG posY, int angle) {
double _posX, _posY;
_posX = (posX*cos((double)angle*PI / 180.0) - posY * sin((double)angle*PI / 180.0));
_posY = (posX*sin((double)angle*PI / 180.0) + posY * cos((double)angle*PI / 180.0));
POINT pp;
pp.x = (LONG)_posX;
pp.y = (LONG)_posY;
return pp;
}
七、字符生成与旋转实现
在 文件下完成。
void CGenerateCharacterView::OnDraw(CDC* pDC)
{
CGenerateCharacterDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
int i = 0;
while(1) {
i++;
pDC->TextOutW(10, 10, L"每次旋转30°");
InitCharStorgeMatrix();
DrawChar(100, 100, 1, 1, 8, i*30);//放大8倍,初始旋转角度为i*30
Sleep(1000);//延时
CRect rt(0, 0, 1000, 1000);
pDC->FillSolidRect(&rt, RGB(255, 255, 255));//刷新屏幕
}
}