我有一个数组: int[][] lawn = new int[980][1280];
它存储草坪中叶片的高度值。
在我的模拟中,我有一个机器人在草坪上行走并切割刀片。
我的机器人呈圆形,直径为 (rDiameter)。
坐标系是用 Double 完成的,我的草坪是用 Integer 完成的。
我开发了两种允许机器人修剪草坪的“算法”,但我不满意,因为我的算法的精度不够高,而且性能也不够高。
我的问题是,除了我已经想到的想法之外,还有其他方法可以做到这一点吗?
或者我是否需要改变我的草坪的实施以获得更好的结果?
如果我不够清楚,请随时询问。
这是我的两个算法的代码(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);
}
}
}