java多边形生成_如何为凹多边形生成回声路径
我需要一个算法来绘制任意多边形的回声路径 . 如果多边形是凸的问题很容易解决 . 要理解我的意思,请看下面的图片,其中黑色是原始多边形,红色是从原始多边形生成的回声多边形 .
d 是给定的回波路径之间的距离
知道我们所拥有的顶点坐标,很容易计算出角度
因此,您可以看到每个顶点我们可以计算 L ,从而为下一个回波路径提供新的顶点 .
问题是当我们在某一点上有凹多边形时,我们会得到一个自交叉多边形的丑陋图像 . 请看一下这张照片 .
我想要做的是生成没有自交叉部分的回波多边形,即没有带虚线的部分 . 算法或 java 代码将非常有用 . 谢谢 .
Edit
只需添加一段代码,为评论中提出的凸多边形生成回声路径 .
public List createEchoCoCentral( List pointsOriginal, float encoderEchoDistance, int appliqueEchoCount){
List contourPoints = pointsOriginal;
List echoPaths = new ArrayList<>();
for (int round = 0; round < appliqueEchoCount; round++) {
List echoedPoints = new ArrayList<>();
int size = contourPoints.size()+1;//+1 because we connect end to start
Point previousPoint = contourPoints.get(contourPoints.size() - 1);
for (int i = 0; i < size; i++) {
Point currentPoint;
if (i == contourPoints.size()) {
currentPoint = new Point(contourPoints.get(0));
} else {
currentPoint = contourPoints.get(i);
}
final Point nextPoint;
if (i + 1 == contourPoints.size()) {
nextPoint = contourPoints.get(0);
} else if (i == contourPoints.size()) {
nextPoint = contourPoints.get(1);
} else {
nextPoint = contourPoints.get(i + 1);
}
if (currentPoint.x == previousPoint.x && currentPoint.y == previousPoint.y) continue;
if (currentPoint.x == nextPoint.x && currentPoint.y == nextPoint.y) continue;
// signs needed o determine to which side of polygon new point will go
float currentSlope = (float) (Math.atan((previousPoint.y - currentPoint.y) / (previousPoint.x - currentPoint.x)));
float signX = Math.signum((previousPoint.x - currentPoint.x));
float signY = Math.signum((previousPoint.y - currentPoint.y));
signX = signX == 0 ? 1 : signX;
signY = signY == 0 ? 1 : signY;
float nextSignX = Math.signum((currentPoint.x - nextPoint.x));
float nextSignY = Math.signum((currentPoint.y - nextPoint.y));
nextSignX = nextSignX == 0 ? 1 : nextSignX;
nextSignY = nextSignY == 0 ? 1 : nextSignY;
float nextSlope = (float) (Math.atan((currentPoint.y - nextPoint.y) / (currentPoint.x - nextPoint.x)));
float nextSlopeD = (float) Math.toDegrees(nextSlope);
//calculateMidAngle - is a bit tricky function that calculates angle between two adjacent edges
double S = calculateMidAngle(currentSlope, nextSlope, signX, signY, nextSignX, nextSignY);
Point p2 = new Point();
double ew = encoderEchoDistance / Math.cos(S - (Math.PI / 2));
p2.x = (int) (currentPoint.x + (Math.cos(currentSlope - S)) * ew * signX);
p2.y = (int) (currentPoint.y + (Math.sin(currentSlope - S)) * ew * signX);
echoedPoints.add(p2);
previousPoint = currentPoint;
}
//createPathFromPoints just creates MyPath objects from given Poins set
echoPaths.add(createPathFromPoints(echoedPoints));
//remove last point since it was just to connect end to first point
echoedPoints.remove(echoedPoints.size() - 1);
contourPoints = echoedPoints;
}
return echoPaths;
}
java多边形生成_如何为凹多边形生成回声路径相关推荐
- java多边形填充_关于java:从图像(填充形状)生成多边形
我正在尝试从预处理的世界地图生成多边形, 到目前为止,我所做的是: 1:为每个国家/地区生成等高线图,如下所示: 从这里开始,我用这些随机颜色填充了这些国家中的每个国家: 到目前为止,香港专业教育学院 ...
- 用pfx证书java双向认证_把CA证书生成的crt的证书和pem的私钥转换成java能够使用的keystore和pcks12的证书,实现https双向认证...
最近在做一个https双向认证的工作,领导先让我实现,我之前写了一篇文章,把tomcat的生成证书和配置的实现写了出来. 现在领导给了我服务器的CA证书的客户端证书和私钥,服务端信任证书,分别是crt ...
- java 手绘_用普通照片生成手绘素描
Java对图像的处理,具有相当强的表现能力,下列程序可以将普通照片生成类似于手绘的素描. import java.awt.color.ColorSpace; import java.awt.image ...
- java语言生成语法分析_语法分析器自动生成工具一览
最近打算重做以前的一个留下遗憾的工作,当中的一项小任务就是要求编写一个简易SQL语言的语法分析器. 本科的<编译原理>课程依稀在我脑中留下些许映象.当初的课程大作业是写一个叫Dicuf(貌 ...
- java唯一码_唯一邀请码生成(Java版本)
前言 之前收到一个需求,甲方说,他们想给用户生成一个唯一的邀请码,然后用户量在xxx之类的,例如我这里就随便说个5kw个吧.这个嘛,听起来都觉得挺简单的,毕竟每个用户基本上都有自己的唯一用户id,用那 ...
- eladmin代码自动生成_高效代码自动化生成
最效率的代码自动化 前言 今天我们来看一下springboot中使用mybatis来自动生成代码,以前做ssh框架的时候实体和映射经常自己新建,浪费大量的时间,不过hibernate,到现在还是那么的 ...
- python ppt自动生成_实战 | Python自动生成PPT调研报告
原标题:实战 | Python自动生成PPT调研报告 原文: 全文约 3821 字,读完可能需要 5 分钟. 文/JSong @2017.02.28 在数据分析里面有一句话是说,80%的时间要用于数据 ...
- python RTL自动生成_利用python自动生成证件照
又到了一次交个人信息表的时候了,在word照片框贴照片时发现自己之前放在e盘的电子照片不见了,我丢.之前去照相馆就只留了一张底片,疫情当前(打游戏懒得出门),作为时代好青年,出门拍照是不可能的,为一张 ...
- c++ ea 代码 生成_看EA如何生成代码框架
EA的使用给我们带来了极大的方便,同时,在对EA不断的深入使用过程中,我们也一步步的对其功能有了深层次的了解,这次我学到的新功能,就是通过EA,将类图转换成代码框架,这是如何做到的呢? 代码工程设置 ...
- python评语生成_电商 Python 生成补单公司需要的评论格式3
一.整理一个包含刷单信息的excel excel的名字:excel_comment.xlsx excel的列名:买家会员名收货人金额评论 二.生成好的评论 注意:两边的数据条数必须一样,比如:有5个刷 ...
最新文章
- 我用Java+SeimiCrawler+Redis+ES+Kibana技术对数百万知乎用户进行了数据分析,得到了这些......
- java void方法_Java对象类的最终void wait(long ms)方法,包含示例
- zabbix mysql设置中文乱码_解决zabbix监控因php问题导致图形界面中文乱码方法
- springcloud 系列教程一:微服务与网站架构演变过程
- (80)FPGA复位激励(function)
- 深度学习自学(一):Loss function 损失函数
- 西方主要管理思想简介
- 2021年中国国家级高新区 (科技园)数量、产值及营业收入分析[图]
- 聊聊软件开发的REP、CCP、CRP原则
- iOS软键盘弹出后视图向上移动
- cortana连不上网络_Alexa,为什么Cortana仍在我的计算机上?
- 计算机毕业设计springboot+uniapp点餐外卖系统源码
- 量子计算 3 量子门与测量
- Redis之sql缓存
- 你要相信没有到不了的明天
- Java技术原理详解
- 创维e900v21e芯片_创维e900v21e网络机顶盒强制刷机教程及注意事项
- 关于硅胶按键丝印的表面问题及解决办法
- Unity基础学习六,网络同步
- 安卓版华为主题解析软件 一键解析收费主题