⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connectline.cpp

📁 一个遗传算法的VC版本
💻 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 + -