JAVA——操场跑步路径定位模拟解决方案
解决方案
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——操场跑步路径定位模拟解决方案相关推荐
- 让 IOS 设备模拟自己在操场跑步
让 IOS 设备模拟自己在操场跑步 背景 我的解决方案: 其他解决方案: 具体步骤 1. 在 Xcode 上新建一个含GPX文件的 IOS 项目 2. Google 地图密集 标一圈操场,获得位置信息 ...
- java虚拟机资源根目录_Java路径问题最终解决方案—可定位所有资源的相对路径寻址 - java - CSDN技术......
Java路径问题最终解决方案 -可定位所有资源的相对路径寻址 前言 Java的路径问题,非常难搞.最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决Java路径问题. 我编写了一个方法,比 ...
- Java路径问题最终解决方案—可定位所有资源的相对路径寻址
Java路径问题最终解决方案-可定位所有资源的相对路径寻址 @(JAVA)[java] http://www.cnblogs.com/0616–ataozhijia/p/4094952.html ht ...
- Java路径问题最终解决方案
http://blog.csdn.net/shendl/article/details/1427475 Java路径问题最终解决方案 -可定位所有资源的相对路径寻址 前言 Java的路径问题,非常难 ...
- Java路径问题最终解决方案使用演示
Java路径问题最终解决方案使用演示 前言 在<Java路径问题最终解决方案-可定位所有资源的相对路径寻址>一文中,我给大家提供了一个助手类ClassLoaderUtil ,和它的publ ...
- java 右键获取路径,java路径
Java NIO(十五) Path 的用法 Java路径接口是Java NIO 2更新的一部分,Java NIO在Java 6和Java 7中接收Java路径接口.Java路径接口已添加到Java 7 ...
- JAVA获取CLASSPATH路径--转
ClassLoader提供了两个方法用于从装载的类路径中取得资源: public URL getResource(String name); public InputStream g ...
- java rpm 安装路径_如何查找rpm方式安装的软件路径
首先要申明一下which java是定位不到安装路径的.which java定位到的是java程序的执行路径.网上的资料都是人云亦云,完全不去思考.那么怎么定位到java的安装路径呢?下面我们来看看例 ...
- java中常用的定位方式有哪些_java-selenium八种元素定位方式
一.ID定位 一般情况下页面元素的id属性在当前网页中是唯一的所以使用ID定位可以保证定位的唯一性,不会像其他定位方式一样可能定位到多个页面元素.但有的网页页面元素没有id属性值,导致无法使用ID定位 ...
最新文章
- 取出json中的数据php,怎么从Json中取出数据放到一个新组中
- Python 编程语言的核心是什么?
- java 是否含有日文_《JAVA编程思想》5分钟速成:第9章(接口)
- 用jQuery预加载图像
- 旷视5号员工陈可卿:1991生于绍兴、10岁买电脑改变命运,信息奥赛金牌保送清华...
- has no attribute 'xw_plus_b'
- SSM-网站后台管理系统制作(2)---SSM基本工作原理
- 面试经历记录——东方海外OOCL上海软件开发中心实习生
- 8月24日科技联播:特斯拉回应苹果“疯狂挖人”,对方比我们有钱100倍
- java博饼_java博饼游戏( 完善中。。。。。。。。。。。)
- 三创赛优秀作品_三创赛优秀作品.doc
- Couch-to-5K 跑步计划
- Icpc 焦作站现场赛 E 题解
- 图书管理系统之DAO设计与实现
- Win10 Docker 安装mysql8.0
- pdfbox 第一页加内容_PDFBox添加页面
- 智能导诊——融威众邦
- python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式
- 微信小程序数据渲染和数据请求
- 美国计算机专业硕士排名,US News美国计算机专业硕士排名
热门文章
- C# socket编程第二篇
- 自定义验证控件CustomValidator
- Qt ObjectModel (from Qt doc)
- DotNetNuke与MemberShip的结合(五年版) 三步汇总
- python r语言 结合 部署_(转)python中调用R语言通过rpy2 进行交互安装配置详解...
- java linkedhashmap_java学习-hashMap和linkedHashMap
- access如何查询两张表的内容_为什么可以的话,不要使用星号 *,而是相应的字段名来进行查询 MySQL内连接如何选择驱动表
- MySQL的explain简书_MySQL Explain
- 所有的工程师都鄙视 php 工程师.,程序员的鄙视链(所有工程师都鄙视php工程师23333)...
- webpack 语法