当前位置: 首页 > news >正文

使用Python计算平面多边形间最短距离,数据需要从excel表格中导入

使用Python计算平面多边形间最短距离,数据需要从excel表格中导入,
* 多边形种类包括(圆形、矩形、六边形、五边形、跑道形/胶囊形),
* Python代码需要使用gjk算法进行判断两个多边形间是否重叠,
* 如果未重叠计算最短距离
package controller.com.codermart.controller;import java.util.ArrayList;
import java.util.Comparator;
import java.util.Random;/*** Created by Lenovo on 2023/10/16.*/
public class PythonAlgorithm {public static void main(String[] args) {int testVar=1;switch (testVar){case 1:break;case 2:break;}}/*** 使用Python计算平面多边形间最短距离,数据需要从excel表格中导入,* 多边形种类包括(圆形、矩形、六边形、五边形、跑道形/胶囊形),* Python代码需要使用gjk算法进行判断两个多边形间是否重叠,* 如果未重叠计算最短距离* @param shapeFir* @param shapeSec* @return*/public static Double getShapeDistance(Shape shapeFir,Shape shapeSec){if (shapeFir==null){return null;}if (shapeFir.getShapeWindowsCordination()==null){return null;}if (shapeFir.getShapeWindowsCordination().isEmpty()){return null;}if (shapeSec==null){return null;}if (shapeSec.getShapeWindowsCordination()==null){return null;}if (shapeSec.getShapeWindowsCordination().isEmpty()){return null;}//        String name = ShapeEnum.CIRCLER.getName();String shapeWindowsCordination = shapeFir.getShapeWindowsCordination();String shapeWindowsCordination1 = shapeSec.getShapeWindowsCordination();StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < shapeWindowsCordination.length(); i++) {char c = shapeWindowsCordination.charAt(i);if (Character.isDigit(c)){stringBuilder.append(Integer.valueOf(c));}else if (",".equals(c)){stringBuilder.append(" ");continue;}}String s = stringBuilder.toString();String[] split = s.split("\\s");ArrayList<Integer> integers = new ArrayList<>();for (int i = 0; i < split.length; i++) {integers.add(Integer.valueOf(split[i]));}StringBuilder stringBuilder1 = new StringBuilder();for (int i = 0; i < shapeWindowsCordination1.length(); i++) {char c = shapeWindowsCordination.charAt(i);if (Character.isDigit(c)){stringBuilder1.append(Integer.valueOf(c));}else if (",".equals(c)){stringBuilder.append(" ");continue;}}String s1 = stringBuilder1.toString();String[] split1 = s1.split("\\s");ArrayList<Integer> integers1 = new ArrayList<>();for (int i = 0; i < split1.length; i++) {integers1.add(Integer.valueOf(split1[i]));}Integer integer = integers.get(0);Integer integer1 = integers1.get(1);int i = integer * integer1;Integer integer2 = integers.get(0);Integer integer3 = integers1.get(1);int i1 = integer2 * integer3;int i2=0;if (i>i1){i2 = i - i1;}else {i2 = i1 - i;}double sqrtDistance = Math.sqrt(i2);return sqrtDistance;}public static Double getShortestDistance(Shape shapeFir, Shape shapeSec){if (shapeFir==null){return null;}if (shapeFir.getShapeWindowsCordination()==null){return null;}if (shapeFir.getShapeWindowsCordination().isEmpty()){return null;}if (shapeSec==null){return null;}if (shapeSec.getShapeWindowsCordination()==null){return null;}if (shapeSec.getShapeWindowsCordination().isEmpty()){return null;}//Random random = new Random(); //获取图形中的随机点ArrayList<Double> doubles = new ArrayList<>();int count=0;while (true){Double shapeDistance = getShapeDistance(shapeFir, shapeSec); // 计算随机点的两个坐标之间的距离doubles.add(shapeDistance);if (count>1000000){break;}count++;}doubles.sort(new Comparator<Double>() {@Overridepublic int compare(Double o1, Double o2) {if(o1>o2){return -1;}else if(o1<o2){return 1;}else {return 0;}}});Double minDistance = doubles.get(0);return minDistance;}
}/*** 圆形、矩形、六边形、五边形、跑道形/胶囊形*/
enum ShapeEnum{CIRCLER(1,"圆形",""),RECTANGLE(2,"矩形",""),SIXEDGESHAQUARE(3,"六边形",""),FIVEEDGESHAPE(4,"五边形",""),RUNNINGCIRCLE(5,"跑道形","");ShapeEnum(int index, String name, String desc) {this.index = index;this.name = name;this.desc = desc;}private int index;private String name;private String desc;public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}
}
class Windows{private String id;private String windowsCordination; // 所定义的视窗窗口windows的坐标位置 (*,*)public String getId() {return id;}public void setId(String id) {this.id = id;}public String getWindowsCordination() {return windowsCordination;}public void setWindowsCordination(String windowsCordination) {this.windowsCordination = windowsCordination;}
}class Shape{private String id;private String name; //图形的形状private String shapeWindowsCordination; // 图形的形状放在视窗windows中的相对坐标 "(1,3)" , 视窗矩形的坐标private String windows_id;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getWindows_id() {return windows_id;}public void setWindows_id(String windows_id) {this.windows_id = windows_id;}public String getShapeWindowsCordination() {return shapeWindowsCordination;}public void setShapeWindowsCordination(String shapeWindowsCordination) {this.shapeWindowsCordination = shapeWindowsCordination;}
}

 

http://www.lryc.cn/news/199112.html

相关文章:

  • 华为数通方向HCIP-DataCom H12-831题库(多选题:1-20)
  • CCC数字钥匙设计【NFC】--通过NFC进行车主配对Phase3
  • 开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单
  • 为什么嵌入通常优于TF-IDF:探索NLP的力量
  • oracle-AWR报告生成方法
  • 笙默考试管理系统-MyExamTest----codemirror(37)
  • 【Unity3D编辑器拓展】Unity3D的IMGUI、GUI、GUILayout、EditorGUI、EditorGUILayout、OnGUI【全面总结】
  • 11. 机器学习 - 评价指标2
  • Nginx的代理和负载均衡
  • Oracle发布支持Vscode的Java插件
  • 互联网Java工程师面试题·Java 总结篇·第九弹
  • SpringCloud学习笔记-gateway网关自定义全局过滤器
  • 数字图像处理实验记录四(图像的空间域增强-平滑处理)
  • 怎么使用LightPicture开源搭建图片管理系统并远程访问?【搭建私人图床】
  • pytorch_神经网络构建4
  • 外骨骼机器人和人形机器人概览
  • Java面试题:链表-反转链表
  • el-upload实现上传文件夹
  • 京东数据平台(京东数据分析)2023年9月京东冰箱行业品牌销售排行榜!
  • 【Excel】WPS单元格快速转换表格字母大小写
  • 【java】【重构一】分模块开发设计实战
  • Cocos Creator3.8 项目实战(十)使用 protobuf详细教程
  • 第七章:最新版零基础学习 PYTHON 教程—Python 列表(第八节 -在 Python 中获取列表作为用户的输入)
  • Simple RPC - 02 通用高性能序列化和反序列化设计与实现
  • 简单秒表设计仿真verilog跑表,源码/视频
  • 【发布】Photoshop ICO 文件格式插件 3.0
  • 负载均衡、代理和动静分离的战略
  • Gitlab用户角色权限Guest、Reporter、Developer、Master、Owner
  • C#上位机序列9: 批量读写+事件广播+数据类型处理
  • 科技资讯|2023全球智能手表预估出货1.3亿块,智能穿戴提升AI功能