码迷,mamicode.com
首页 > 其他好文 > 详细

计算平面中点间距离

时间:2016-07-23 21:30:36      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:小代码

/*
理论是可以直接数组做的
然后呢现在复习呀……………………   用小demo复习c++
下面的代码达到以下几点
1.N=9好理解 好展示
2.N为一个大数时,可以用于测
3.注意没有写入文件  可以直接用cmd  重定向exe 到txt

*/
//http://blog.csdn.net/yanxiaolx/article/details/51986428 

  //http://blog.csdn.net/yanxiaolx/article/details/51986428 


#include<iostream>
#include<list>
#include<cmath>
#include <iomanip>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
const int N = 9;
double x[N] = {0,0,0,1,1,1,2,2,2};
double y[N] = {0,1,2,0,1,2,0,1,2};
double ds[N][N]= {0};
void Rand()
{ 
 	srand(time(0));
	int n = 0;
	while(n < N)
	{
 		x[n] = rand()%100;
 		y[n] = rand()%100;
		++n;
	}
}

class Point
{
public:
	Point(double x,double y,double ox,double oy)
		:startx(x),starty(y),endx(ox),endy(oy)
	{}
	Point(const Point& point)
	{
		startx = point.startx;
		starty = point.starty;
		endx = point.endx;
		endy = point.endy;
	}
private:
	double startx;
	double starty;
	double endx;
	double endy;
	friend ostream&  operator<<(ostream &out,Point &point);
};

ostream&  operator<<(ostream &out,Point &point)
{
	out<<"("<<point.startx<<","<<point.starty<<")"<<" "
		<<"("<<point.endx<<","<<point.endy<<")";
	return out;
}


template<class _Ty>
class List
{
public:
	List(){}
	~List(){}
	void add(const _Ty&point)
	{
		List_.push_back(point);
	}

	bool IsExist(double s)
	{
		it = List_.begin();
		for(;it != List_.end();++it)
		{
			if(s == (*it).getdistence())
			{
				return true;
			}
		}
		return false;
	}
	bool Insert(double s,Point point)
	{
		it = List_.begin();
		for(;it != List_.end();++it)
		{
			if((*it).getdistence() == s)
			{
				(*it).add(point);
				return true;
			}
		}
		return false;
	}

	void disp()
	{
		it = List_.begin();
		for(;it != List_.end();++it)
		{
			(*it).disp();
		}
		cout<<endl;
	}
private:
	list<_Ty> List_;
	typename list<_Ty>::iterator it;
};

template<typename _Ty=Point>
class SList
{
public:
	SList(double s=0):d(s){}
	~SList(){}
	void add(const _Ty&point)
	{
		slist.push_back(point);
	}

	double getdistence()
	{
		return d;
	}

	void disp()
	{
		it = slist.begin();
		cout<<"距离:"<<d<<endl;
		for(;it != slist.end();++it)
		{
			cout<<*it<<endl;
		}
	}
	
private:
	double d;
	list<_Ty> slist;
	typename list<_Ty>::iterator it;

};

void calculate()
{
	double d = 0;
	for(int i=0;i < N;++i)
	{
		for(int j=i+1;j < N;++j)
		{
			d = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
			ds[i][j] = d;
		}
	}
}

void show()
{
	for(int i=0;i < N;++i)
	{
		for(int j=0;j < N;++j)
		{
			cout<<setw(6)<<ds[i][j]<<" ";
		}
		cout<<endl;
	}
}

int main()
{
	List<SList<Point> > List;
 	//Rand();
	calculate();
	 show();

	for(int i=0;i < N;++i)
	{
		for(int j=0;j < N;++j)
		{
			if(ds[i][j] != 0 )
			{
				if(!List.IsExist(ds[i][j]))
				{
					List.add(SList<Point>(ds[i][j]));
				}
				List.Insert(ds[i][j],Point(x[i],y[i],x[j],y[j]));
			}
		}
	}
	List.disp();
	return 0;
}
/*


LINUX  下的测试 随机数需要添加


计算平面中点间距离

标签:小代码

原文地址:http://wzsts.blog.51cto.com/10251779/1829031

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!