java判断两线段是否相交
首先推荐java的Line2D类自带方法linesIntersect
1 | java.awt.geom.Line2D.linesIntersect(x1, y1, x2, y2, x3, y3, x4, y4); |
自定义方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | / * * 两【线段】是否相交 * @param l1x1 线段 1 的x1 * @param l1y1 线段 1 的y1 * @param l1x2 线段 1 的x2 * @param l1y2 线段 1 的y2 * @param l2x1 线段 2 的x1 * @param l2y1 线段 2 的y1 * @param l2x2 线段 2 的x2 * @param l2y2 线段 2 的y2 * @ return 是否相交 * / public static boolean intersection(double l1x1, double l1y1, double l1x2, double l1y2, double l2x1, double l2y1, double l2x2, double l2y2) { / / 快速排斥实验 首先判断两条线段在 x 以及 y 坐标的投影是否有重合。 有一个为真,则代表两线段必不可交。 if (Math. max (l1x1,l1x2) < Math. min (l2x1 ,l2x2) || Math. max (l1y1,l1y2) < Math. min (l2y1,l2y2) || Math. max (l2x1,l2x2) < Math. min (l1x1,l1x2) || Math. max (l2y1,l2y2) < Math. min (l1y1,l1y2)) { return false; } / / 跨立实验 如果相交则矢量叉积异号或为零,大于零则不相交 if ((((l1x1 - l2x1) * (l2y2 - l2y1) - (l1y1 - l2y1) * (l2x2 - l2x1)) * ((l1x2 - l2x1) * (l2y2 - l2y1) - (l1y2 - l2y1) * (l2x2 - l2x1))) > 0 || (((l2x1 - l1x1) * (l1y2 - l1y1) - (l2y1 - l1y1) * (l1x2 - l1x1)) * ((l2x2 - l1x1) * (l1y2 - l1y1) - (l2y2 - l1y1) * (l1x2 - l1x1))) > 0 ) { return false; } return true; } |
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
· Windows 提权-UAC 绕过
2013-12-29 Spring-4.0 + Quartz-2.2.1 集群实例(Tomcat+Memcached+Quartz集群session共享)还是没有解决Serializable序列化