Я добавил код C Я надеюсь, что это помогает сделать функцию Java
читал, как сохранить точки, которые находятся между двумя точками (то есть: являются частью сегмента, с некоторой неточностью) здесь:Как я могу определить, находится ли точка рядом с определенной линией?
Таким образом, я реализовал этот маленький алгоритм в 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
).
Знаете ли вы, если я неправильно понял ответ, который я дал вам в первой строке этого вопроса? Видите ли вы ошибку в моей собственной реализации этого алгоритма?