解决方案

package cn.edu.zstu.myzstu.spyder.hongqingting;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2020-10-29 21{27*/
public class PlaygroundMap extends RegionalSportsMap{/*** 初始化坐标信息*/private MeterPoint p1,p2,p3,p4;private Double l1,l2,l3,l4,totleLength;public PlaygroundMap(){this.p1= MeterPoint.parse(new LatLonPoint(30.311800891797446, 120.35574664089964));this.p2= MeterPoint.parse(new LatLonPoint(30.312759515931962, 120.35571445439146));this.p3= MeterPoint.parse(new LatLonPoint(30.31275951593204, 120.35649229500578));this.p4= MeterPoint.parse(new LatLonPoint(30.311828678136038, 120.35648156616972));this.l1=MeterPoint.getDistance(this.p1,this.p2);this.l2=MeterPoint.getDistance(this.p3,this.p2)*Math.PI/2;this.l3=MeterPoint.getDistance(this.p4,this.p3);this.l4=MeterPoint.getDistance(this.p4,this.p1)*Math.PI/2;this.totleLength=this.l1+this.l2+this.l3+this.l4;}/*** 通过距离开始位置的路程(米)获得坐标* @param dis 距离开始位置的路程(米)* @return*/@OverrideMeterPoint getPoint(Double dis) {while(dis>this.totleLength){dis-=this.totleLength;}while(dis<0){dis+=this.totleLength;}if(dis<this.l1){Double rat=dis/this.l1;Double x=(this.p2.x-this.p1.x)*rat+this.p1.x;Double y=(this.p2.y-this.p1.y)*rat+this.p1.y;return new MeterPoint(x,y);}else if(dis<this.l1+this.l2){Double r=MeterPoint.getDistance(this.p2,this.p3)/2;Double deg=(dis-this.l1)/r;Double cx=(this.p2.x+this.p3.x)/2;Double cy=(this.p2.y+this.p3.y)/2;Double deg_=Math.atan((this.p2.x-cx)/(this.p2.y-cy));if(this.p2.y-cy<0){ deg_+=Math.PI;}deg=deg_-deg;Double x=cx+r*Math.sin(deg);Double y=cy+r*Math.cos(deg);return new MeterPoint(x,y);}else if(dis<this.l1+this.l2+this.l3){Double rat=(dis-this.l1-this.l2)/this.l3;Double x=(this.p4.x-this.p3.x)*rat+this.p3.x;Double y=(this.p4.y-this.p3.y)*rat+this.p3.y;return  new MeterPoint(x,y);}else{Double r=MeterPoint.getDistance(this.p4,this.p1)/2;Double deg=(dis-this.l1-this.l2-this.l3)/r;Double cx=(this.p1.x+this.p4.x)/2;Double cy=(this.p1.y+this.p4.y)/2;Double deg_=Math.atan((this.p4.x-cx)/(this.p4.y-cy));if(this.p4.y-cy<0){deg_+=Math.PI;}deg=deg_-deg;Double x=cx+r*Math.sin(deg);Double y=cy+r*Math.cos(deg);return  new MeterPoint(x,y);}}/*** 通过距离开始位置的路程(米)获得带有法向噪声的坐标* @param dis 距离开始位置的路程(米)* @param normalOffset 法向噪声系数(米)* @return*/@OverrideMeterPoint getPointWithOffset(Double dis, Double normalOffset) {while(dis>this.totleLength){dis-=this.totleLength;}while(dis<0){dis+=this.totleLength;}MeterPoint noVec;if(dis<this.l1) {noVec = new MeterPoint(this.p2.y - this.p1.y, this.p1.x - this.p2.x);Double l = MeterPoint.getDistance(noVec, new MeterPoint(0, 0));noVec = new MeterPoint(noVec.x / l, noVec.y / l);} else if(dis<this.l1+this.l2){Double r=MeterPoint.getDistance(this.p2,this.p3)/2;Double deg=(dis-this.l1)/r;Double cx=(this.p2.x+this.p3.x)/2;Double cy=(this.p2.y+this.p3.y)/2;Double deg_=Math.atan((this.p2.x-cx)/(this.p2.y-cy));if(this.p2.x-cx<0){deg_+=Math.PI;}deg=deg_-deg;noVec=new MeterPoint(Math.sin(deg),Math.cos(deg));} else if(dis<this.l1+this.l2+this.l3) {noVec = new MeterPoint(this.p4.y - this.p3.y, this.p3.x - this.p4.x);Double l = MeterPoint.getDistance(noVec, new MeterPoint(0, 0));noVec = new MeterPoint(noVec.x / l, noVec.y / l);}else{Double r = MeterPoint.getDistance(this.p4, this.p1) / 2;Double deg = (dis - this.l1 - this.l2 - this.l3) / r;Double cx = (this.p1.x + this.p4.x) / 2;Double cy = (this.p1.y + this.p4.y) / 2;Double deg_ = Math.atan((this.p4.x - cx) / (this.p4.y - cy));if(this.p4.x - cx < 0){deg_ += Math.PI;}deg = deg_ - deg;noVec = new MeterPoint(Math.sin(deg), Math.cos(deg));}MeterPoint raw = this.getPoint(dis);return new MeterPoint(raw.x + noVec.x * Math.random() * normalOffset,raw.y + noVec.y * Math.random() * normalOffset);}
}

参考文章

SYC genRunData

JAVA——操场跑步路径定位模拟解决方案相关推荐

  1. 让 IOS 设备模拟自己在操场跑步

    让 IOS 设备模拟自己在操场跑步 背景 我的解决方案: 其他解决方案: 具体步骤 1. 在 Xcode 上新建一个含GPX文件的 IOS 项目 2. Google 地图密集 标一圈操场,获得位置信息 ...

  2. java虚拟机资源根目录_Java路径问题最终解决方案—可定位所有资源的相对路径寻址 - java - CSDN技术......

    Java路径问题最终解决方案 -可定位所有资源的相对路径寻址 前言 Java的路径问题,非常难搞.最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决Java路径问题. 我编写了一个方法,比 ...

  3. Java路径问题最终解决方案—可定位所有资源的相对路径寻址

    Java路径问题最终解决方案-可定位所有资源的相对路径寻址 @(JAVA)[java] http://www.cnblogs.com/0616–ataozhijia/p/4094952.html ht ...

  4. Java路径问题最终解决方案

    http://blog.csdn.net/shendl/article/details/1427475  Java路径问题最终解决方案 -可定位所有资源的相对路径寻址 前言 Java的路径问题,非常难 ...

  5. Java路径问题最终解决方案使用演示

    Java路径问题最终解决方案使用演示 前言 在<Java路径问题最终解决方案-可定位所有资源的相对路径寻址>一文中,我给大家提供了一个助手类ClassLoaderUtil ,和它的publ ...

  6. java 右键获取路径,java路径

    Java NIO(十五) Path 的用法 Java路径接口是Java NIO 2更新的一部分,Java NIO在Java 6和Java 7中接收Java路径接口.Java路径接口已添加到Java 7 ...

  7. JAVA获取CLASSPATH路径--转

    ClassLoader提供了两个方法用于从装载的类路径中取得资源: public URL getResource(String name);          public InputStream g ...

  8. java rpm 安装路径_如何查找rpm方式安装的软件路径

    首先要申明一下which java是定位不到安装路径的.which java定位到的是java程序的执行路径.网上的资料都是人云亦云,完全不去思考.那么怎么定位到java的安装路径呢?下面我们来看看例 ...

  9. java中常用的定位方式有哪些_java-selenium八种元素定位方式

    一.ID定位 一般情况下页面元素的id属性在当前网页中是唯一的所以使用ID定位可以保证定位的唯一性,不会像其他定位方式一样可能定位到多个页面元素.但有的网页页面元素没有id属性值,导致无法使用ID定位 ...

最新文章

  1. 取出json中的数据php,怎么从Json中取出数据放到一个新组中
  2. Python 编程语言的核心是什么?
  3. java 是否含有日文_《JAVA编程思想》5分钟速成:第9章(接口)
  4. 用jQuery预加载图像
  5. 旷视5号员工陈可卿:1991生于绍兴、10岁买电脑改变命运,信息奥赛金牌保送清华...
  6. has no attribute 'xw_plus_b'
  7. SSM-网站后台管理系统制作(2)---SSM基本工作原理
  8. 面试经历记录——东方海外OOCL上海软件开发中心实习生
  9. 8月24日科技联播:特斯拉回应苹果“疯狂挖人”,对方比我们有钱100倍
  10. java博饼_java博饼游戏( 完善中。。。。。。。。。。。)
  11. 三创赛优秀作品_三创赛优秀作品.doc
  12. Couch-to-5K 跑步计划
  13. Icpc 焦作站现场赛 E 题解
  14. 图书管理系统之DAO设计与实现
  15. Win10 Docker 安装mysql8.0
  16. pdfbox 第一页加内容_PDFBox添加页面
  17. 智能导诊——融威众邦
  18. python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式
  19. 微信小程序数据渲染和数据请求
  20. 美国计算机专业硕士排名,US News美国计算机专业硕士排名

热门文章

  1. C# socket编程第二篇
  2. 自定义验证控件CustomValidator
  3. Qt ObjectModel (from Qt doc)
  4. DotNetNuke与MemberShip的结合(五年版) 三步汇总
  5. python r语言 结合 部署_(转)python中调用R语言通过rpy2 进行交互安装配置详解...
  6. java linkedhashmap_java学习-hashMap和linkedHashMap
  7. access如何查询两张表的内容_为什么可以的话,不要使用星号 *,而是相应的字段名来进行查询 MySQL内连接如何选择驱动表
  8. MySQL的explain简书_MySQL Explain
  9. 所有的工程师都鄙视 php 工程师.,程序员的鄙视链(所有工程师都鄙视php工程师23333)...
  10. webpack 语法