- 主题:求直线选取的简单算法
一个鼠标点坐标{x0, y0}, 一条线段的两个点{x1, y1}, {x2, y2}, 线宽w,
选取需要一定的余量,不是说鼠标点严格在线段上,而是包围线段两点构造一个类似OBB包围盒的范围(可以认为是考虑了线宽),只要鼠标点在这个包围盒内部,就算选中该线段。
最好是经典的算法,不要涉及太多运算(要求有点过分哈)。
求算法,谢谢
--
FROM 114.249.193.*
很简单吧。点到直线距离,距离小于某个阈值就认为选中。
【 在 anything1999 的大作中提到: 】
: 一个鼠标点坐标{x0, y0}, 一条线段的两个点{x1, y1}, {x2, y2}, 线宽w,
: 选取需要一定的余量,不是说鼠标点严格在线段上,而是包围线段两点构造一个类似OBB包围盒的范围(可以认为是考虑了线宽),只要鼠标点在这个包围盒内部,就算选中该线段。
: 最好是经典的算法,不要涉及太多运算(要求有点过分哈)。
: ...................
--
FROM 120.244.156.*
实话实说,看你的程序级别。我是做十万级别的,
这个实际构建一般需要线段树(我一般直接上Rtree),kd-tree也可
将每个线段,拓宽为rectangle bounding box(MBR),添加到Rtree中去
然后鼠标点击中心半径搜到少量的MBR,再用点直线的距离来逐个判断是否OK
判断时,O(logN)
我这就是最优的最经典的,其他人说的不用看
【 在 anything1999 的大作中提到: 】
: 一个鼠标点坐标{x0, y0}, 一条线段的两个点{x1, y1}, {x2, y2}, 线宽w,
: 选取需要一定的余量,不是说鼠标点严格在线段上,而是包围线段两点构造一个类似OBB包围盒的范围(可以认为是考虑了线宽),只要鼠标点在这个包围盒内部,就算选中该线段。
: 最好是经典的算法,不要涉及太多运算(要求有点过分哈)。
: ...................
--
FROM 124.127.212.*
不错,一直用quadtree, RTree更好吗?
【 在 lushan5436 的大作中提到: 】
: 实话实说,看你的程序级别。我是做十万级别的,
: 这个实际构建一般需要线段树(我一般直接上Rtree),kd-tree也可
: 将每个线段,拓宽为rectangle bounding box(MBR),添加到Rtree中去
: ...................
--
FROM 114.249.193.*
rtree适应场景更广,实际上,如果你的直线分布比较均匀,quadtree性能更好。
但rtree从cad,到gis等各种场景,牛鬼蛇神都能很好适用
【 在 anything1999 的大作中提到: 】
: 不错,一直用quadtree, RTree更好吗?
:
--
FROM 120.244.162.*