저는 배열을 가지고 있습니다 : 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);
}
}
}
중간 점 원 알고리즘을 사용하지 않고 좌표를 배열에 저장 한 다음 원을 한 줄씩 채우는 것은 어떻습니까? – harold