一条线,由若干个节点连接而成,List对象数组,每节点的坐标已知,每相邻两个节点都是直线连接。现有一点,坐标已知,怎么求出这个点最靠近哪条线段

+N一米阳光 2015-07-14 02:42:45
一条线(弯弯曲曲不规则),由若干个节点连接而成,List对象数组,每节点的坐标已知,每相邻两个节点都是直线连接。现有一点,坐标已知,怎么求出这个点最靠近哪条线段
...全文
612 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
丶初号鸡 2015-07-14
  • 打赏
  • 举报
回复
遍历list集合 每两个相邻的点 和 已知的点带到getLength方法中去,然后把距离算出来后比较下就可以了
丶初号鸡 2015-07-14
  • 打赏
  • 举报
回复
笨的办法就是把所有线段都比较一下 选择距离最小的那个。
+N一米阳光 2015-07-14
  • 打赏
  • 举报
回复
简单的点到线段距离算法已有,现在是想知道这个点(不在线上)最靠近哪条线段 /** * 计算点到线段的距离 * @param x * @param y * @param x1 * @param y1 * @param x2 * @param y2 * @return */ public static double getLength(double x, double y, double x1, double y1, double x2, double y2){ double cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1); if (cross <= 0) return Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1)); double d2 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); if (cross >= d2) return Math.sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2)); double r = cross / d2; double px = x1 + (x2 - x1) * r; double py = y1 + (y2 - y1) * r; return Math.sqrt((x-px)*(x-px)+(py-y)*(py-y)); }

13,097

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧