specioperation.cpp

来自「moto e2键盘软锁第三版」· C++ 代码 · 共 143 行

CPP
143
字号
// SpeciOperation.cpp: implementation of the SpeciOperation class.
//
//////////////////////////////////////////////////////////////////////
#include "SpeciOperation.h"
#include "math.h"
#include <stdio.h>#include <stdlib.h>#include <qpoint.h>
#include <iostream.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

SpeciOperation::SpeciOperation()
{

}

SpeciOperation::~SpeciOperation()
{

}

void SpeciOperation::matrixSetIdentity(float m[][3])
{
	int i,j;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			m[i][j]=(i==j);
}

void SpeciOperation::matrixPreMultiply(float a[][3],float b[][3])
{
	int r,c;
	float t[3][3];
	for(r=0;r<3;r++)
		for(c=0;c<3;c++)
			t[r][c]=a[r][0]*b[0][c]+a[r][1]*b[1][c]+a[r][2]*b[2][c];
	for(r=0;r<3;r++)
		for(c=0;c<3;c++)
			b[r][c]=t[r][c];
}
/*
void SpeciOperation::translate(int tx, int ty)
{
	matrixSetIdentity(theMatrix);
	float m[3][3];
	matrixSetIdentity(m);
	m[0][2]=tx;
	m[1][2]=ty;
	matrixPreMultiply(m,theMatrix);

}

void SpeciOperation::scale(float sx, float sy, float x, float y)
{
	matrixSetIdentity(theMatrix);

	float m[3][3];
	matrixSetIdentity(m);
	m[0][0]=sx;
	m[0][2]=(1-sx)*x;
	m[1][1]=sy;
	m[1][2]=(1-sy)*y;
	matrixPreMultiply(m,theMatrix);
}
*/
void SpeciOperation::rotate(float a, float x, float y)
{
matrixSetIdentity(theMatrix);
	float m[3][3];
	matrixSetIdentity(m);
	a=a*(3.14/180);
	m[0][0]=cos(a);
	m[0][1]=-sin(a);
	m[0][2]=x*(1-cos(a))+y*sin(a);	
	m[1][0]=sin(a);
	m[1][1]=cos(a);
	m[1][2]=y*(1-cos(a))-x*sin(a);
	matrixPreMultiply(m,theMatrix);
}

void SpeciOperation::Change(QPoint &ap, QPoint &bp, int style)
{point a,b;a.x=ap.x();a.y=ap.y();b.x=bp.x();b.y=bp.y();
float aa=(float)a.x;float bb=(float)a.y;float cc=(float)b.x;float dd=(float)b.y;
	switch(style)
	{
	case 1:
		a.x+=theMatrix[0][2];
		a.y+=theMatrix[1][2];
		b.x+=theMatrix[0][2];
		b.y+=theMatrix[1][2];
		break;
	case 2:
		a.x=a.x*theMatrix[0][0]+theMatrix[0][2];
		a.y=a.y*theMatrix[1][1]+theMatrix[1][2];
		b.x=b.x*theMatrix[0][0]+theMatrix[0][2];
		b.y=b.y*theMatrix[1][1]+theMatrix[1][2];
		break;
	case 3:
		a.x=aa*theMatrix[0][0]+bb*theMatrix[0][1]+theMatrix[0][2];
		a.y=aa*theMatrix[1][0]+bb*theMatrix[1][1]+theMatrix[1][2];
		b.x=cc*theMatrix[0][0]+dd*theMatrix[0][1]+theMatrix[0][2];
		b.y=cc*theMatrix[1][0]+dd*theMatrix[1][1]+theMatrix[1][2];
		break;
	default:
		break;
	} 
}

void SpeciOperation::Change(int &ax, int &ay, int style)
{
		int aa=ax,bb=ay;
	switch(style)
	{
	case 1:
		ax+=theMatrix[0][2];
		ay+=theMatrix[1][2];
		
		break;
	case 2:
		ax=ax*theMatrix[0][0]+theMatrix[0][2];
		ay=ay*theMatrix[1][1]+theMatrix[1][2];
		
		break;
	case 3:
		ax=aa*theMatrix[0][0]+bb*theMatrix[0][1]+theMatrix[0][2];
		ay=aa*theMatrix[1][0]+bb*theMatrix[1][1]+theMatrix[1][2];
		
		break;
	default:
		break;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?