У меня есть массив: int [] [] lawn = new int [980] [1280];
, в котором хранятся значения высоты ножей на газоне.
В моем симуляции у меня есть робот, который обходит газон и режет ножи.
мой робот имеет форму круга с диаметром (rDiameter).Система координат выполнена с помощью Double, а мой газон находится в целых числах.
Я разработал два "алгоритма", которые позволяют роботу подстригать газон, но я не удовлетворен, потому что точность моих алгоритмов не высокахватит и производительности тоже.
Мой вопрос, есть ли способ сделать это, кроме идей, о которых я уже подумал?
Или мне нужно изменить реализацию моегогазон, чтобы получить лучшие результаты?
Не стесняйтесь спрашивать что-нибудь, если я не достаточно ясно.
Вот код для моих двух алгоритмов (k означает робот), centerPosition возвращает центрмоего робота (так что центр круга)
approach with square
int bottomLeftCornerX = (int) (k.getCenterPosition().getX() - simulParams.getKDiameter() / 2);
int bottomLeftCornerY = (int) (k.getCenterPosition().getY() - simulParams.getKDiameter() / 2);
for (int i = bottomLeftCornerX; i < bottomLeftCornerX + simulParams.getKDiameter(); i++) {
for (int j = bottomLeftCornerY; j < bottomLeftCornerY + simulParams.getKDiameter(); j++) {
((LawnArea) lawn.getBladeHeight()).cutBladeInArea(j, i);
}
}
А вот тот, с подходом круга (в основном это формула окружности, присутствующая в Википедии ...):
for (int r = 0; r < simulParams.getKDiameter() / 2; r++) {
for (double t = 0; t < 2 * Math.PI; t = t + 0.1) {
Point2D p = circumference(k.getCenterPosition().getX(), k.getCenterPosition().getY(), t, r);
int intX = (int) Math.ceil(p.getX());
int intY = (int) Math.ceil(p.getY());
((LawnArea) lawn.getBladeHeight()).cutBladeInArea(intY, intX);
}
}
}