实际解决问题

高德地图,百度地图求方圆五米内的一个随机经纬度

方案一
随机产生(x,y)
x2∗y2≤R2x^{2}*y^{2} \le R^{2}x2∗y2≤R2
去除不在圆内的点

public LatLng getRandomLatLng(LatLng point) {Random random = new Random();double cirx = point.latitude;double ciry = point.longitude;double circleR = 0.00025;double r2 = Math.pow(circleR, 2);double x = (random.nextInt(500) * 0.000001) - circleR;double y = (random.nextInt(500) * 0.000001) - circleR;if (r2 > Math.pow(x, 2) + Math.pow(y, 2)) {return new LatLng(cirx + x, ciry + y);}return getRandomLatLng(point);
}

方案二
用极坐标的方法
x=r∗sin(θ)x = r*sin(\theta)x=r∗sin(θ) y=r∗sin(θ)y = r*sin(\theta)y=r∗sin(θ)
其中 0 ⩽ r ⩽ R,0 ⩽ theta < 360 t为0-1均匀分布产生的随机数,r=sqrt(t)∗R
如果单纯用极坐标的话,中间的点会比较密集所以对r添加一个开方因子具体证明

public LatLng getRandomLatLng(LatLng point) {Random random = new Random();double cirx = point.latitude;double ciry = point.longitude;double circleR = 0.000250;double r = Math.sqrt(Math.random()) * circleR;double theta = random.nextInt(3600000) * 0.0001;double x = r * Math.sin(theta);double y = r * Math.cos(theta);return new LatLng(cirx + x, ciry + y);
}

纯极坐标

添加随机因子

方案三
x2∗y2=R2x^{2}*y^{2} = R^{2}x2∗y2=R2
根据该公式先确定一个x,然后解出y的范围,添加一个随机因子就可以了。
该方案的弊端是会使y(或者x看确定的哪个)两端的点变得很密集。不能够平均的分布

 public LatLng getRandomLatLng(LatLng point) {Random random = new Random();double cirx = point.latitude;double ciry = point.longitude;double circleR = 0.000250;double x = (random.nextInt(500) * 0.000001) - circleR;double c = (random.nextInt(2000000) * 0.000001) - 1;double y = c * Math.sqrt(circleR * circleR - x * x);return new LatLng(cirx + x, ciry + y);
}

什么,你说我的圆不够圆?

原因在这:

地球半径:6371000M
地球周长:2 * 6371000M  * π = 40030173
纬度38°地球周长:40030173 * cos38 = 31544206M
任意地球经度周长:40030173M经度(东西方向)1M实际度:360°/31544206M=1.141255544679108e-5=0.00001141
纬度(南北方向)1M实际度:360°/40030173M=8.993216192195822e-6=0.00000899经度(东西方向)100M实际度:0.00001141°* 100=0.001141°
纬度(南北方向)100M实际度:0.00000899°* 100=0.000899°

这下就圆了

《Android开发偶遇有趣算法问题》---获得地图方圆r米内的一个随机坐标点(求单位圆内随机点)相关推荐

  1. 好难过!八年深漂,搞Android开发要价50万,面了六家公司,竟一个offer都没拿到!

    最近逛脉脉职言,看到最多的就是客户端两年内消失.Android开发找不到工作. 这段时间从北上广深杭不断传来一两个月找不到工作的消息,我一个从杭州去上海的朋友也是一周多了才拿到一只手都能数过来的面试机 ...

  2. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  3. Android开发调用手机上安装的地图应用导航

    项目开发过程中需要调用地图应用进行导航,通常会使用百度地图和高德地图,调用地图看官方文档就可以搞定. 首先根据包名判断地图应用是否安装: 百度地图包名:com.baidu.BaiduMap 高德地图包 ...

  4. 2016 校招, Android 开发,一个本科应届的坎坷求职之路(转)

    转载出处:http://www.nowcoder.com/discuss/3244?type=2&order=0&pos=1&page=1 和大多数的面经不同,我不是大牛,手头 ...

  5. Android开发 Intent传递参数,获取数据为null

    android开发 Activity通过Intent传递参数,获取失败的原因 启动一个有返回值的activity (MapActivity) Intent intent = new Intent(Up ...

  6. python安卓版开发环境搭建_React Native Android 开发环境搭建(Windows 版)

    补上之前说的 Windows 系统的 React Native 开发环境搭建,坑还是比 Mac 环境下的多些.此文的受众还是已经搭建过 Android 开发环境的同学. 需要安装的软件 Chocola ...

  7. Android开发笔记(七十四)布局文件优化

    include/merge 布局优化中常常用到include/merge标签,include的含义类似C代码中的include,意思是直接把指定布局片段包含进当前的布局文件.include适用于多个布 ...

  8. Unity3D教程:手游开发常用排序算法 -下

    五.堆排序(Heap Sort) 1. 基本思想: 堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小 ...

  9. android 开发 python_用python语言开发android应用程序(1) - 格物致知的博客空间 - 中国移动开发者社区 - Powered by X-Space...

    对于不熟悉Java语言,又想进入android开发领域的人来说,似乎有两个选择,一个是重新开始学习Java语言,然后开始学习android开发,一个就是到处求方问药:在android上可不使用XXX语 ...

  10. 行业凛冬,Android开发怎样准备一场完美的面试?

    前言 作为一名程序员,想必大家都应该经历过跳槽和面试,这也是我们职业生涯中升职加薪的重要组成部分.特别是在今年来行情并不怎么景气的Android开发,岗位职能被小程序或前端所代替,可谓是"一 ...

最新文章

  1. 蓝桥杯省赛最短路径-模板
  2. OSError: [WinError 126] 找不到指定的模块/Could not find 'cudart64_90.dll'.
  3. 编程爱好者学vb还是python-Python语言为什么被称为高级程序设计语言?
  4. 关闭子页面刷新父页面,不需要弹出确认窗口
  5. Java EE API整合:为什么Spring要与“笨重”的Java EE共舞?
  6. SAP CRM Category创建场景
  7. linux ida 图形界面,linux – IDA在屏幕内不起作用
  8. 如何循环遍历document.querySelectorAll()方法返回的结果
  9. pandas学习笔记二之pandas选择器
  10. Java笔记-spring-rabbitmq中queue设置argument(添加x-message-ttl)
  11. 字符串匹配BF/RK/BM/KMP算法
  12. 不知道这些,你的世界杯就白看了!
  13. java 子类 继承父类的注解,spring使用注解通过子类注入父类的私有变量
  14. Highways POJ-1751 最小生成树 Prim算法
  15. java keytool用法,java中Keytool的使用总结
  16. python 批量修改文件夹和子文件夹的名称
  17. Python django 会议室管理系统
  18. 网络爬虫和网络数据管理的常见问题集合
  19. 你还在用if-else吗?
  20. 影视剪辑,自学剪辑,如何提高剪辑的思维

热门文章

  1. AutoCAD 系统变量
  2. GPT-3写了一篇论文
  3. hone hone clock创意前端时钟
  4. 使用Arduino IDE来编写上传STM32以及STM8代码,STM32Duino教程
  5. 电脑键盘上各个按键功能详解
  6. 浅谈傅里叶——6. 采样、频率与一个简易的DFT函数
  7. java tld tag_jsp中引用的tag和tld文件
  8. 如何使用XMind进行高效的时间管理
  9. 华为p20nfc怎么复制门禁卡_新功能上线!你的手机NFC也可以当门禁卡使用
  10. 解决python使用controlcan.dll接收报文每次只能处理一条报文信息问题