2010-04-28 6 views
1

다양한 크기의 이미지가 있습니다. 이러한 이미지를 일종의 자동화 된 콜라주로 캔버스에 배치하고 싶습니다. 누구나이 개념의 논리를 작동시키는 방법에 대한 아이디어가 있습니까?콜라주 캔버스에 이미지 배치

내 모든 이미지의 높이는 36 픽셀로 나눌 수 있고 너비는 9 픽셀로 나눌 수 있습니다. 드래그 앤 드롭 할 수있는 mouseDown 함수가 있습니다. 떨어 뜨리면 이미지는 9로 나눌 수있는 가장 가까운 x 점과 36 점으로 나뉘는 y 점으로 이동합니다. 캔버스 상단에 그리드가 그려집니다.

나는 높이를 기준으로 이미지 배열을 정렬 한 다음 폭을 기준으로 정렬했습니다.

imagesArray.sortOn ("height", Array.NUMERIC | Array.DESCENDING); imagesArray.sortOn ("width", Array.NUMERIC | Array.DESCENDING);

가장 큰 이미지 (imageArray [0])를 사용하여 코너 x, y = 0,0에 넣고 싶습니다. 그런 다음 나머지 이미지를 무작위로 만들어 콜라주 캔버스에 맞 춥니 다.

답변

0

트리 맵핑 및 패킹 문제를 연구했습니다. .... 그리고 마침내 캔버스에 모든 점의 배열을 만든 다음 비어있는 값을 할당하기로 결정했습니다. 그런 다음 이미지 배열을 반복하여 "비어있는"점에 배치하고 이미지의 소스 이름으로 점령 한 모든 점을 다시 할당했습니다. 그것은 아름답게 일했습니다. 그러나 배열을 만드는 데는 시간이 걸립니다.

1

당신이하려고하는 것은 treemapping처럼 들립니다.

+0

treemapping이 ...이 재미 있고 내가 할 노력하고있어에 비슷한 모양, 나는 논리가 내 요구에 정확히 맞도록 변환 할 수있는 방법을 모르겠어요. – Bridget

+0

글쎄, 거기에 알고리즘을 주어진 장소에 다른 크기의 물건이 있습니다. 나는 그것이 이미지로 멋지다고 생각한다. :) – ilikeorangutans

1

"Packing problem"또는 "2D bin packing problem"이라고 생각합니다. 그 (것)들을 인터넷 검색은 당신에게 몇몇 정보를 찾아 내고, 능률적으로하는 것은 간단한 업무가 아니다. 적은 수의 이미지 만있는 경우 쉬운 방법은 다음과 같습니다.

  1. 랜덤 ... 더 이상 적합하지 않을 때까지 이미지를 임의로 배치합니다. 이 랜덤 배치를 10..100..1000 번 이상 실행하고 최상의 결과를 선택하십시오 ("최적"은 낭비되는 공간의 최소량 또는 대부분의 그림 적합 등과 같은 일부 기준에 의해 결정됨)

  2. 브루트 힘차게 ... 가능한 모든 조합을 하나씩 시도하고 "최고의"것을 선택하십시오. 이 방법의 단점은 항목 수가 증가함에 따라 계산량이 매우 빠르게 증가한다는 것입니다.