两个坐标点之间的距离小于或大于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;
}

  

原文地址:https://www.cnblogs.com/workharder/p/11818019.html

时间: 2024-10-12 10:22:49

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

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

贴代码如下: package com.qcsd.xulin.util; import java.awt.*; /** * @author xulin * @date create in 9:06 2018/11/1 * Description 根据提供的两个国标经纬度,计算两个点之间的距离 */ public class DistanceConsider { // 地球半径 private static double EARTH_RADIUS = 6378.137; private static

java通过经纬度计算两个点的之间的距离的算法

通过两个点的经纬度计算距离 从google maps的脚本里扒了段代码,没准啥时会用上.大家一块看看是怎么算的.private const double EARTH_RADIUS = 6378.137;private static double rad(double d){   return d * Math.PI / 180.0;} public static double GetDistance(double lat1, double lng1, double lat2, double ln

计算两个坐标点之间的点的坐标

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>计算两个坐标点之间的点的坐标</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> &l

获取两个点经纬度之间的距离

/** * js获取两个经纬度之间的距离 * @param lat1 第一点的纬度 * @param lng1 第一点的经度 * @param lat2 第二点的纬度 * @param lng2 第二点的经度 * @returns {Number} */ function getDistance(lat1, lng1, lat2, lng2) { var radLat1 = lat1*Math.PI / 180.0; var radLat2 = lat2*Math.PI / 180.0; var

计算两个latitude-longitude点之间的距离? (Haversine公式)

问题描述 如何计算纬度和经度指定的两点之间的距离?为了澄清,我想要距离公里;这些点使用WGS84系统,我想了解可用方法的相对准确性.最佳解决方案 这个link可能对您有帮助,因为它详细说明了使用Haversine formula计算距离. 摘抄: This script [in Javascript] calculates great-circle distances between the two points – that is, the shortest distance over the

PHP计算两个经纬度地点之间的距离

/**  * 求两个已知经纬度之间的距离,单位为米  *   * @param lng1 $ ,lng2 经度  * @param lat1 $ ,lat2 纬度  * @return float 距离,单位米  * @author www.Alixixi.com   */ function getdistance($lng1, $lat1, $lng2, $lat2) {     // 将角度转为狐度     $radLat1 = deg2rad($lat1); //deg2rad()函数将角

计算两个经纬地之间的距离

/** * 计算两个经纬度之间的距离 (lon1,lat1),(lon2,lat2) * @param lan1 * @param lat1 * @param lan2 * @param lat2 * @return */ public static double GetDistance(double lng1, double lat1, double lng2, double lat2) { double EARTH_RADIUS = 6371.393; double radLat1 = (l

PHP 根据两点的坐标计算之间的距离

define('PI',3.1415926535898); define('EARTH_RADIUS',6378.137); //计算范围,可以做搜索用户 function GetRange($lat,$lon,$raidus){ //计算纬度 $degree = (24901 * 1609) / 360.0; $dpmLat = 1 / $degree; $radiusLat = $dpmLat * $raidus; $minLat = $lat - $radiusLat; //得到最小纬度

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

local EARTH_RADIUS = 6378.137local function rad(d) return d * math.pi / 180.0end local function getDistance(lat1,lng1,lat2,lng2) local radLat1 = rad(lat1) local radLat2 = rad(lat2) local a = radLat1 - radLat2 local b = rad(lng1) - rad(lng2) local s =