计算平面中点间距离

发布时间:2020-06-23 17:37:35 作者:wzdouban
来源:网络 阅读:454
/*
理论是可以直接数组做的
然后呢现在复习呀……………………   用小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  下的测试 随机数需要添加


推荐阅读:
  1. 计算页面滚出的距离
  2. Halcon之计算距离算子

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

小代码

上一篇:利用BitLocker和VHD实现共享文件加密

下一篇:关于C# 中 “$” 符号的用法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》