两个坐标点之间的距离小于或大于10(最优算法)

Posted 生命不息,奋斗不止。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个坐标点之间的距离小于或大于10(最优算法)相关的知识,希望对你有一定的参考价值。

朋友跟我分享的某大厂面试题:

两个坐标点之间的距离小于或大于某个值。最简单的算法,勾股定理,distance = (x1-x2)的平方 + (y1-y2)的平方,最后开根号。还有没有效率更高的算法啊?百度没找到答案,我写下自己的,如果大家有好的想法,记得给我留言啊啊啊~~

我的算法思想是:先求出弧度,再用cos把10映射到x轴的长度,最后再比较。

执行1千万次的结果是方法2效率高。

直接上代码吧。

#include <iostream>
#include <time.h>
#include <math.h> 
//坐标点1
double nX1 = -3;double nY1 = -3;
//坐标点2
double nX2 = 3;double nY2 = 3;
//方法1勾股定理
bool CheckNear1(int nTarLen)
{
	int nLen = sqrt((pow((nX1-nX2), 2) + pow((nY1-nY2), 2)));
	return nTarLen > nLen;
}
//方法2利用弧度算出给定值对应的直角边长度
bool CheckNear2(int nTarLen)
{
	int nSubX = abs(nX1-nX2);
	int nLen = nTarLen*cos(atan(nSubX/(nY1-nY2)));
	return nLen > nSubX;
}
int main()
{
	clock_t start,finish;
	start=clock();
	for (int i = 0;i<10000000;++i)
	{
		CheckNear1(10);
	}
	finish=clock();
	cout<<"\\n方法1的运行时间为"<<(double)(finish-start)/CLOCKS_PER_SEC<<"秒!"<<endl;

	start=clock();
	for (int i = 0;i<10000000;++i)
	{
		CheckNear2(10);
	}
	finish=clock();
	cout<<"\\n方法2的运行时间为"<<(double)(finish-start)/CLOCKS_PER_SEC<<"秒!"<<endl;
	return 0;
}

  

以上是关于两个坐标点之间的距离小于或大于10(最优算法)的主要内容,如果未能解决你的问题,请参考以下文章

基于笛卡尔坐标点积的算法计算地理距离

根据两点的经纬度坐标计算两个坐标点之间的直线距离

两个坐标点的距离怎样算

如何计算两个GPS坐标点的距离?

Lua 计算两个GPS坐标点之间的距离

百度地图Api 根据两个坐标点计算距离