我读了如何保持这两点之间的点(即:那是段的一部分,具有一定的不精确性)位置:How can I tell if a point is nearby a certain line?如何删除远离细分的点?
因此,我实现了这个小算法在Java中,我的代码是(注意,变量的名字应该很清楚你:))!
List<Cupple> returned = new ArrayList<>(points_to_test);
for(Cupple c : points_to_test) {
/*if(c == segment_first_point || c == segment_last_point) {
continue;
}*/
if(Math.abs(Math.abs(
(segment_last_point.getNumber(0) - segment_first_point.getNumber(0))
*
(segment_first_point.getNumber(1) - c.getNumber(1))
-
(segment_first_point.getNumber(0) - c.getNumber(0))
*
(segment_last_point.getNumber(1) - segment_first_point.getNumber(1))
)
/
Math.sqrt(
Math.pow((segment_last_point.getNumber(0) - segment_first_point.getNumber(0)), 2)
+
Math.pow((segment_last_point.getNumber(1) - segment_first_point.getNumber(1)), 2)
)
) > maximal_allowed_distance) {
returned.remove(c);
}
}
return returned;
要确保你明白:
returned
是与上段,或接近点列表该段(和“不精确” /最大距离确定的点是出了段的是变量:maximal_allowed_distance
)points_to_test
都存在于我的曲线图中的点:我的两个段+的的实际上位于该段上的点+几乎位于该段上的点(< =maximal_allowed_distance
)+远离该段(>maximal_allowed_distance
)的点。 我的小算法的想法是,我删除了所有后者。segment_[first|last]_point
是两个部分的四肢c
是points_to_test
当前点,我想知道这是否是远离段或(根据maximal_allowed_distance
)getNumber(0)
返回该点的X坐标,getNumber(1)
返回Y一个。
但是,它不起作用。它不返回优点(即:考虑到maximal_allowed_distance
)中的分数。
你知道,如果我误解了我给你在这个问题的第一行的答案吗?您是否在我自己实现此算法时看到任何错误?
问题势必之间的距离“注意,列举法确定从无限线的距离。如果你需要近有限段分而已,你会修改它。”事实上。您能否告诉我我应该如何删除这些点的方式? –
你还没有回答 - 如果...> maximal_allowed_distance)'情况有火吗? – MBo
是的,我的问题的确只是由于这样一个事实,即在该段末端延伸的点被忽略(即:未被移除,因为被认为属于该段)。 –