0

플로트의 2D 배열로 표현 된 입면도가 있습니다.경계에서 경계 설정

테두리 셀 (해당 xy 좌표로 식별 됨)의 목록을 포함하는 단일 벡터에 포함 된 가장자리를 가진이지도의 영역이 있습니다.

에지 셀은 관련 영역이 무엇인지 알지 못하며 벡터 내에서 연속적으로 인접 해있는 에지 셀도지도에서 서로 인접하지 않습니다.

이 정보 (전체지도의 가장자리 셀 목록, 다시는 인접하지 않을 수 있음)를 기반으로 각 영역을 고유하게 식별 할 수 있기를 바랍니다.

나는 하나의 가장자리 셀에서 시작하여 가장자리를 가로 지르려고 생각했지만, 둘러싸인 공간에는 제외되어야 할 영역 (호수 자체가있는 섬 주변의 호수)이 포함될 수 있습니다. 몇 가지 양동이 채우기를 사용하는 것을 고려해 보았지만 이는 중요한 고도 데이터를 손상시키고 정보를 저장하기위한 두 번째 배열을 만들고 싶지 않습니다.

효과적인 방법에 대한 의견이 있으십니까?

답변

0

리처드,

이, 그것은 고전적인 연결 구성 요소 라벨링 문제가되지 않습니다입니까?

'상태'지도, 즉 픽셀을 개별 값으로 할당 할 수있는 보조 이미지를 저장할 수있는 경우 실제로 여러 가지 해결책이 있습니다. 이러한 방법 중 실제로 가장자리 픽셀을 페인트 한 다음 둘러싸인 영역을 가득 채울 수 있습니다. 이 경우 픽셀 당 단일 비트이면 충분합니다.

이 비트에 추가 저장 용량을 원하지 않는다면 부동 소수점 값에서 "저장"할 수 있습니다. 예를 들어 모든 고도가 양수인 경우이 목적을 위해 부호 비트를 쓴 다음 나중에 다시 설정할 수 있습니다. 부동 소수점 위에 비트 필드를 매핑하여 C 언어로 쉽게 수행 할 수 있습니다.

+0

원래 문제를 해결하기 위해 추가 메모리를 사용하는 데 어려움이 있었지만 비트 필드를 사용하여 문제를 해결할 수있는 가장 우아하고 빠른 방법 인 것처럼 보였으므로이를 사용합니다. – Richard

+0

그래, -0은 여전히 ​​0이기 때문에 아마도 비트 연산자를 사용하여 부호 비트를 토글하는 것이 더 안전 할 것입니다. –

+0

오, 나는 2d 불리언 배열을 사용하겠다는 뜻이었습니다. 그러나 당신은 내가 간과 한 것 같은 훌륭한 포인트를 만듭니다! – Richard