그래서 표면에 균열이있는 2D 벡터가 있으며 특별한 순서는 없습니다. 균열이 너무 가깝다면 다른 균열 (3 단위라고합시다) 중 하나 또는 두 균열을 멀리 옮겨야합니다 (최대 8 단위). 식별 된 유형 B 균열은 수정되지 않습니다. 내 프로그램은 지금까지 방정식의 라인을 따라 또는 균열을 평행하게 번역하는 기능을 가지고 있습니다.배열 요소를 동적으로 업데이트하십시오 (다른 요소의 변경 사항을 기반으로합니다).
균열을 다른 것으로부터 멀리 옮기면 문제가 발생합니다. 다른 균열에 너무 가까워지면 문제가 발생합니다. 이렇게하려면 두 번째 번역이 필요하며 문제가 해결되지 않은 경우 세 번째 번역도 필요합니다. 그러나 이것은 계산 집약적입니다. 첫 번째 반복에서 278 개의 균열을 이동 한 다음 두 번째에서 278을 다시 이동하고 세 번째에서 다시 이동하면 277^3 = 21,253,933 번 계산됩니다 (각 균열에 대해 277 개의 다른 균열까지의 거리를 계산해야 함). . 이제는 항상 278 개의 균열을 모두 번역해야하는 것은 아니지만 모든 균열을 이동시키는 데 더 좋은 알고리즘이 필요하므로 적어도 3 단위가 서로 떨어져 있어야합니다. 동적 검색 영역을 사용하려고해도 278 개의 모든 균열을 반복해야합니다.
알려 주시기 바랍니다. 나는 붙어있어 어떻게 진행해야할지 모르겠다. 당신은 주위에 "영토"를 만들 수 또한
surf[x][y].occupied = true;
: 당신은에 의해 그들에 균열 어떤 사각형을 점유로 표시 한 수면 블록으로 다음과 같은 구조체 그런
struct Square{
bool occupied;
Square *crack;
};
를 사용할 수
포인터 대신에 균열 좌표에 두 개의 int를 사용할 수도 있고 비어있는 경우 -1을 사용할 수도 있습니다. –
균열을 XML에서 읽으므로이를 구현하는 것이 좋습니다. 모든 균열은 마지막 균열에 도달 할 때까지 계산됩니다. 이 사실을 깨닫도록 도와 주셔서 감사합니다. – masshakar