# 【数字图像处理之四】图像的放大缩小旋转

，将背景色除去。

#include<iostream>
#include<math.h>
using namespace std;

/**
* 坐标点类，保存一个坐标
*/
class Position{
public:
int x;// H
int y;// W
Position(int x,int y){
this->x = x;
this->y = y;
}
};

class Vector{
public:
int x;
int y;
Vector(int x,int y){
this->x=x;
this->y=y;
}
Vector(Position a,Position b){//根据两个点来求向量的坐标
this->x=a.x-b.x;
this->y=a.y-b.y;
}
double getabs(){//求向量的长度
return sqrt(x*x+y*y);
}
};

double get(Vector a,Vector b){
//	cout<<'('<<a.x<<','<<a.y<<')'<<"&&"<<'('<<b.x<<','<<b.y<<')'<<endl;
//	cout<<((double)(a.x)*(double)(b.x)+(double)(a.y)*(double)(b.y))/(double)(a.getabs()*b.getabs())<<endl;
double _a=a.getabs(),_b=b.getabs();
if(_a==0.0 ||_b==0.0){
return -0.707107;//返回该值可以判断该点是否刚好为矩形的顶点。
}
return ((double)(a.x)*(double)(b.x)+(double)(a.y)*(double)(b.y))/(double)(_a*_b);
}

bool isImage(Position *p,int x, int y){
Position d(x,y);
Vector v[4]={Vector(p[0],d),Vector(p[1],d),Vector(p[2],d),Vector(p[3],d)};//创建四个向量
cout<<acos(get(v[0],v[1]))+acos(get(v[0],v[3]))+acos(get(v[2],v[1]))+acos(get(v[2],v[3]))<<endl;
//判断四个向量的夹角之和是否为2π
if(fabs(acos(get(v[0],v[1])) + acos(get(v[0],v[3])) + acos(get(v[2],v[1])) + acos(get(v[2],v[3]))-6.28319)<0.0001){
return true;
}
else return false;

}

int main(){
Position p[4]={Position(0,0),Position(2,0),Position(2,2),Position(0,2)};//矩形的四个顶点的坐标
int i=2,j=2;//判断点(i,j)是不是在矩形内
Position d(i,j);//生成点d(i,j)
if(isImage(p,i,j)){//判断d(i,i)是不是在矩形内，是返回true，否返回false。p是四个矩形的顶点。
cout<<'('<<i<<','<<j<<')'<<' '<<1<<endl;
}
else{
cout<<'('<<i<<','<<j<<')'<<' '<<0<<endl;
}
return 0;
}

/**
* Time:201505261947
* 1 1 1
* 1 0 1 /8 均值滤波，用于填充旋转图片时候空出来的坐标(即花纹)
* 1 1 1
*/
void Processing(RGB_INT **n,int H,int W,int xPos,int yPos,Position *p){
1,1,1,
1,0,1,
1,1,1
};
for(i=k;i<H-k;i++){
for(j=k;j<W-k;j++){
if(isImage(p,i,j) && n[i][j].R==256){
Coff=0;
for(m=-k;m<=k;m++){
for(g=-k;g<=k;g++){
}//for
}//for
if(Coff<0)n[i][j].R=n[i][j].G=n[i][j].B=0;
else{
}
}//if
}//for
}//for
ShowImage(n,H,W,xPos,yPos,p);
}