|
|
|
|
#pragma once
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <set>
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
const double EPSILON = 0.000001;
|
|
|
|
|
struct GridPoint
|
|
|
|
|
{
|
|
|
|
|
int row;
|
|
|
|
|
int col;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct Vector2d
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
Vector2d()
|
|
|
|
|
{
|
|
|
|
|
//EPSILON = dEPSILON;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Vector2d(double dx, double dy)
|
|
|
|
|
{
|
|
|
|
|
x = dx;
|
|
|
|
|
y = dy;
|
|
|
|
|
//EPSILON = dEPSILON;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ʸ<><CAB8><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
void set(double dx, double dy)
|
|
|
|
|
{
|
|
|
|
|
x = dx;
|
|
|
|
|
y = dy;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ʸ<><CAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Vector2d operator + (const Vector2d& v) const
|
|
|
|
|
{
|
|
|
|
|
return Vector2d(x + v.x, y + v.y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ʸ<><CAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Vector2d operator - (const Vector2d& v) const
|
|
|
|
|
{
|
|
|
|
|
return Vector2d(x - v.x, y - v.y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ʸ<><CAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Vector2d Scalar(double c) const
|
|
|
|
|
{
|
|
|
|
|
return Vector2d(c*x, c*y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ʸ<><CAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
double Dot(const Vector2d& v) const
|
|
|
|
|
{
|
|
|
|
|
return x * v.x + y * v.y;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ
|
|
|
|
|
double Mod() const
|
|
|
|
|
{
|
|
|
|
|
return sqrt(x * x + y * y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Equel(const Vector2d& v) const
|
|
|
|
|
{
|
|
|
|
|
if (abs(x - v.x) < EPSILON && abs(y - v.y) < EPSILON)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double x, y;
|
|
|
|
|
//double EPSILON; //<2F><><EFBFBD>س<EFBFBD><D8B3><EFBFBD>
|
|
|
|
|
};
|
|
|
|
|
class VectorToRaster
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
VectorToRaster(void);
|
|
|
|
|
~VectorToRaster(void);
|
|
|
|
|
|
|
|
|
|
void GetRasterLine(vector<int> ptsRow,vector<int> ptsCol,vector<int>& rowList,vector<int>& colList);
|
|
|
|
|
set<vector<int> > GetRasterLineEx(vector<int> ptsRow,vector<int> ptsCol,int row_max,int col_max,int tolerance=1);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void RasterLine(std::pair<Vector2d, Vector2d> line, std::vector<Vector2d>& linePointList);
|
|
|
|
|
|
|
|
|
|
void ExtendGrid(int cx,int cy,int x_max,int y_max,int tolerance,set<vector<int> >& resultSet);
|
|
|
|
|
};
|
|
|
|
|
|