📄 connectline.cpp
字号:
#include "connectline.h"
//////////////// 生成矩阵和获得矩阵 ///////////////
void Line::SetPointMatrix( const vector<POINT>& vecpoint)//
{
drawpoint.clear();
pointmatrix.clear();
drawpoint.reserve(vecpoint.size()); //为向量vector<pair<POINT,int> > drawpoint分配内存
for(int n=0;n<vecpoint.size();n++) //将所有的点编号
{
drawpoint[n].first.x=vecpoint[n].x;
drawpoint[n].first.y=vecpoint[n].y;
drawpoint[n].second=n;
}
vector<int> vectemp(vecpoint.size());//为向量vector<vector<int> > pointmatrix分配内存
for(int n=0;n<vecpoint.size();n++)
{
pointmatrix.push_back(vectemp);
}
for(int n=0;n<vecpoint.size();n++) //生成二维矩阵
for(int m=vecpoint.size()-1;m>n;m--)
{ //开平方和
pointmatrix[n][m]=sqrt( pow(vecpoint[n].x-vecpoint[m].x,2)+pow(vecpoint[n].y-vecpoint[m].y,2));
pointmatrix[m][n]=pointmatrix[n][m];
}
return;
}
vector<vector<int> > Line::GetPointMatrix ( ) //获得矩阵
{
return pointmatrix; //储存任意两点的距离
}
//////////////// 平方差 //////////////////
int Line::CalculateDistance(const POINT& point1,const POINT& point2)
{
return sqrt( pow(abs(point1.x-point2.x),2)+pow(abs(point1.y-point2.y),2));
}
////////////// 根据点向量画线 //////////////////
void Line::DrawLine(HWND hwnd,const vector<POINT>& vecpoint) //连线,按存储的点的顺序
{
HPEN hpen;
HDC hdc=GetDC(hwnd);
hpen=CreatePen(PS_DOT,1,RGB(0,0,255) );
SelectObject(hdc,hpen);
if(vecpoint.size()<=0)
{ return;}
for(int n=0;n<vecpoint.size()-1;n++)
{
MoveToEx( hdc,vecpoint[n].x,vecpoint[n].y,(LPPOINT) NULL);
LineTo(hdc,vecpoint[n+1].x,vecpoint[n+1].y);
}
MoveToEx( hdc,vecpoint.front().x,vecpoint.front().y,NULL);//这条是回到起点
LineTo(hdc,vecpoint.back().x,vecpoint.back().y);
DeleteObject( hpen );
ReleaseDC (hwnd, hdc);
return;
}
//////////////// 保存vector<vector<int> > pointmatrix ////////////////
void Line::SavePointMatrix()
{
fstream outFile( "copy.text", ios_base::out|ios_base::app );
if ( !outFile )
{
cerr << "unable to open input file: "<< " -- bailing out!\n";
return ;
}
if(pointmatrix.size()<=0)
{ return; }
outFile<<"#"<<"矩阵"<<'\n'; ///以后有用
outFile<<"#"<<pointmatrix.size()<<'\n';
for(int n=0;n<pointmatrix.size();n++)
{
for(int m=0;m<pointmatrix[n].size();m++)
{
outFile<<pointmatrix[n][m]<<" ";
}
outFile<<'\n';
}
return;
}
//////////////// 接口函数 /////////////////////////////////
void Line::GaInterface(const pair<vector<int>,int> & pointorder)
{
vector<POINT> result;
for(int n=0;n<pointorder.first.size( );n++)
{ result.push_back( drawpoint[ pointorder.first[n] ].first); }
resultpoint.first=result; //获得所有的点的位置
resultpoint.second=pointorder.second; //获得路程的总长度
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -