我讀了如何保持這兩點之間的點(即:那是段的一部分,具有一定的不精確性)位置: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
是的,我的問題的確只是由於這樣一個事實,即在該段末端延伸的點被忽略(即:未被移除,因爲被認爲屬於該段)。 –