임의의 2D 라인 사이의 공간 채우기


23

임의의 선으로 채워진 영역 (2D)을 고려하십시오 (그림 참조). 우리는 다음과 같은 방식으로 네 개의 경계 모서리를 포함하여 선 사이의 빈 공간을 채우는 데 관심이 있습니다.

0- 소포의 크기를 최대화;
1- 충전 소포의 모양은 수평 또는 수직으로 정사각형으로 정렬됩니다. 충전 소포의
2- 형상은 정사각형, 즉 이완 된 정렬 ; 채우기 소포의
3 모양은 사각형입니다. 우리의 원래 질문

현재로서는 세 가지 시나리오가 있습니다.
참고 선이 양식의 것을 [x1,y1,x2,y2], 지점 세트 실수.

[* * *] 가능한 솔루션 / 알고리즘 / 코드 스 니펫 등의 아이디어는 환영 이상입니다.

여기에 이미지 설명을 입력하십시오


1 업데이트 : : 우리는 첫 번째 경우에 대한 해결책 관리 할 수
여기에 이미지 설명을 입력하십시오
단계는 :
1- 라인
2- 비트 맵으로 라인 래스터
-3- 원하는 색의 셀마다 셀 근처 검색 (즉, 동색) 최대화 할 목적 함수 면적, 즉 셀 수.

잘 작동하지만 첫 번째 시나리오에만 적용되며 속도도 느립니다.


업데이트 2 :
독자는 공간 채우기 타일링 개념에 익숙하다고 가정했습니다. 영감을 얻기 위해 링크를 따라갈 수 있습니다. 그러나 우리의 문제는 다릅니다. 빈 공간을 무작위로 채우지 않고 무작위로 크기를 선택하지 않습니다. 솔루션은 반복적이어야합니다. 모든 경우에, 장착되는 소포의 수에는 제한이 없습니다. 실제로, 예를 들어 소포의 최소 영역을 선택하여 반복 횟수를 제한하는 것은 사용자의 몫입니다. 위에서 지정한 예에서 선을 지정된 크기의 픽셀로 분할했습니다. 즉, 절차는 예를 들어 소포의 최대 면적과 같은 기준에 대해 빈 공간 전체가 채워질 때까지 실행되어야합니다.


업데이트 3 :
요약 :
하나의 응용 프로그램은 골절 된 '광산'에서 추출 가능한 온전한 '록'블록의 분포를 찾는 것입니다. 이 등 시추 설계, 재무 평가 등 많은 측면에 매우 도움이 될 수있는
설명 :
장식 바위 (돌) 가격이 사각형 조각으로 잘라 그대로 바위의 블록입니다 제품의 광산의 크기에 밀접하게 의존 블록. 남아있는 부분의 양이 가능한 한 적다면, 적당한 영역에서 블록을 추출해야한다. 일반적으로 작은 암석 조각은 상대적으로 경제적 가치가 없으며 폐기물로 간주됩니다.
이 게시물의 질문은 이러한 종류의 문제에 대한 솔루션을 조사합니다.

문제에 대한 수학적 견해는 다음과 같이 표현할 수 있습니다.
2D : 주어진 2D 영역에서 추출 할 수있는 모든 직사각형을 최대한 큰 직사각형 크기에 최적화 된 일부 선으로 찾습니다.
3D : 가능한 더 큰 블록 크기에 최적화 된 일부 하위 평면 (더 나은 다각형)을 사용하여 지정된 3D 영역에서 추출 할 수있는 모든 직사각형 큐브를 찾습니다.


이것은 지속적인 연구의 일환이므로 아래 의견에 나와있는 질문 중 일부는 우리가 제공 할 수있는 특정 답변이 없습니다. 우리는 지금까지 제공된 정보가 실제로 문제의 전체적인 그림을 얻기에 충분하다고 생각합니다. 그럼에도 불구하고, 우리는 지역 사회 혜택을 위해 가능한 한 자세한 내용을 제공합니다.
궁극적 인 질문에 대한 솔루션에 약간의 제한을 둘 수 있지만 나중에 더 추가 할 수 있다고 생각합니다. 예를 들어, 이들 따르 {2D 케이스}
상술 한 조건 하에서 추출되는 블록 (경제적으로 최적의 직사각형)의 크기를 최선이다 1x1 m주어진 10x10 m예에서 지역. 이것은 경제적 인 가치를 바탕으로 정의 된 제약입니다. 절단 등을위한 최소 작업 가능 크기0.15x0.15 m; 두 번째 크기 제한입니다.
여기에 이미지 설명을 입력하십시오
위의 그림은 블록 크기에 따른 경제적 인 가치 기능을 보여줍니다. 따라서이 특별한 경우 모든 암석 조각 0.15x0.15 m은 단지 낭비 보다 작습니다 . 1.7x1.7 m작동 한계로 인해 보다 큰 블록 크기는 없습니다 .


3
@RK-동의하지 않습니다. 그녀는 이미 그들이 무엇을 찾고 있는지 명확하게 밝혔습니다. 물론 여러 가지 가능한 솔루션이 있지만 모두 유용하고 투표를 중단 할 수있는 것은 없습니다.
GIS-Jonathan

1
이것은 수학적으로 무거울 수도있는 알고리즘 질문이므로 다음을 시도해 볼 수 있습니다. math.stackexchange.com
GIS-Jonathan

1
밀접한 관련 : gis.stackexchange.com/questions/27303 . @RK가 지적했듯이 현재의 질문은 충분히 잘 제기되지 않았기 때문에 명확한 대답이 없습니다. 몇 개의 직사각형이 허용됩니까? "크기 최대화"는 무엇을 의미합니까? 또한 이것은 "무작위 타일링"문제가 아니라는 점에 유의하십시오. 선은 보완 할 수있는 영역을 차지할뿐입니다. 솔루션은 확실히 임의적 이지 않습니다 . 또한 쉽게 단순화 할 수 있다는 점에 유의하십시오. 문제는 보완의 각 구성 요소 내에서 개별적으로 해결 될 수 있습니다.
whuber

1
@ whuber : 글쎄요, 우리가 관심을 갖고있는 하나의 응용 프로그램은 골절 된 '광산'에 추출 가능한 온전한 '락'블록의 분포를 찾는 것입니다. 글쎄, GIS는이 문제에 유망한 것 같습니다. 우리는 이것을 질문에 추가했습니다. 우리는 GIS 커뮤니티가 관련된 다른 특정 문제에 대한 아이디어로부터 이익을 얻을 수 있다고 생각합니다. 어쨌든, 당신이 그것을 마이그레이션하면 그것은 당신에게 달려 있습니다;)
개발자

4
@ whuber가 제안한 것처럼, 이것은 실제로 GIS 질문이 아닙니다 (여기서 묻는 것이 기분 나쁘지는 않지만). 계산 기하학 또는 최적화에 대한 포럼에서 답변을 얻는 것이 훨씬 더 좋습니다.
Llaves

답변:


2

FME를 사용하여 큰 블록에서 작은 블록으로 반복적으로 작업하는 방법에 대한 아이디어가 있습니다 (안전 소프트웨어). 기록을 위해 나는 그들을 위해 작동하지 않지만 도구를 충분히 칭찬하는 것처럼 보입니다 ...

  1. 관심있는 영역에서 "BoundingBoxReplacer"를 사용하십시오.
  2. 로컬 좌표계로 다시 투영합니다 (나중에 피트 / 미터로 "타일"해야하는 경우).
  3. "버퍼"변압기로 라인을 버퍼링하십시오. .01 ft / meters와 같은 임의의 크기 만 있으면됩니다. 여기서 찾고있는 것은 다음 단계를위한 선의 다각형입니다.
  4. "타일러"변압기를 추가하십시오. 큰 (예상되었거나 그렇지 않은) 타일 크기를 피트 또는 미터로 지정하십시오. 우리가 여기서하는 일은 관심 영역을 사각형 블록으로 타일링하는 것입니다. 데이터 세트에 따라 큰 이상 치를 얻으려면 크게 시작하십시오.
  5. "클리퍼"변압기를 추가하십시오. 우리가 여기서하는 일은 본질적으로 어떤 타일이 좋은지 나쁜지를 확인하기 위해 데이터 세트를 분할하는 것입니다. 출력에서 "내부"타일이 너무 큽니다. 그러나 "외부"타일은 충분히 크고 절단 준비가되었습니다.
  6. 복잡하지만 어렵지 않은 곳이 여기 있습니다. 우리는 원래의 BoundingBox를 재사용하기 위해 변압기를 반복하지만 이미 절단 준비가 된 영역을 잘라냅니다. 따라서 클리퍼를 추가하고 클리퍼를 이전 클리퍼 출력의 "출력"타일로 라우팅하십시오. 이제 다시 작업 할 준비가 된 단일 다각형이 있습니다.
  7. 타일러를 다시 사용하십시오. 이번에는 더 작은 타일을 지정하십시오. 예를 들어, 100 미터 타일을 더 일찍 사용한 경우 90 미터를 시도하십시오.
  8. 입력 클리퍼가 버퍼 라인이되고 입력 클립이 입력으로 작은 타일이되도록 다른 클리퍼를 추가하십시오.

매번 작은 타일을 사용하여 필요한만큼 헹구고 반복하십시오. 하나의 접근 방식으로 사용할 워크 벤치의 시작 부분을 첨부했습니다.

귀하의 (자세한) 설명을 바탕으로 지금은 옵션 1에서만 작동합니다. 아직 너무 많은 시간을 소비하지 않고.

어쨌든, 이것은 적어도 왕겨에서 밀을 걸러 내기 시작하는 한 가지 접근법 일뿐입니다.

FME 타일 예

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.