2017-09-07 1 views
0

동적 객체 목록이 있으며 중첩하지 않고 가운데 객체 주위에 배치해야합니다. 그것들은 모두 직사각형입니다. Java FX 텍스트 개체를 사용하고 있습니다.중심으로 배치 된 객체 주위에 객체 배치

나는 overlapping.There 개체의 크기를 n은하지 않고 주위에 다른 사람의 위치를 ​​어떻게

int x =(int)(scene.getWidth() /2); 
int y =(int)(scene.getHeight() /2); 

와 중앙에 첫 번째 개체를 배치합니다.

충돌을 감지하고 충돌이 감지되면 이동하는 방법을 잘 모르겠습니다.

if collision = true { 
       translate x 30 px{ 
       if still true { 
       translate y 30{ 
       if still true{ 
       translate x -30 
       if still true{ 
       translate y -30{ 
       if still true { 
       start again but increase movement size by 20 each iteration 
       until collision free placement occurs. 


       x----->----x 
       |   | 
       ^  | 
       |   | 
       |   | 
       x----<-----x 

감사

답변

0

두 개의 사각형 당신은 그들이 중복 여부를 확인하기 위해 intersects 메소드를 호출 한 후 java.awt.Rectangle로의 인스턴스를 만들 수 있습니다 중복 여부를 결정합니다. intersection 메서드를 사용하여 다른 요소와 교차하지 않는 위치로 이동해야하는 거리를 계산할 수도 있습니다.

또한 이동 방법에 대한 질문이있었습니다. 내 첫 번째 아이디어는 LayoutManager처럼해야한다는 것입니다. 부모를 확장하고 layoutChildren() 메서드를 재정 의하여 원하는대로 레이아웃하십시오. 충돌없는 정렬을 계산 한 후에 사각형의 절대 좌표를 설정할 수 있습니다.

이 알고리즘은 항상 다른 모든 n 개의 사각형과의 교차점을 확인해야하는 경우 계산량이 많이들 것입니다. 레이아웃을 최적화하기 위해 FlowPane과 같은 LayoutManager를보고 싶을 수도 있습니다. FlowPane는 경계선까지 객체를 한 줄에 배치 한 다음 다음 줄로 나눕니다. (또는 열이 세로 인 경우)

LayoutManager를 사용할 수없는 경우이를 최적화하는 다른 방법이 있지만 유스 케이스에 대한 자세한 정보가 필요합니다. 어쩌면 유스 케이스에 따라 this question이 도움이 될 수 있습니다.

관련 문제