2016-06-01 7 views
1

나는 직사각형 노드와 방향이없는 가장자리로 구성된 Java에서 "그림판"응용 프로그램을 작성하는 중입니다. 문제는 모서리의 시작이 모서리가 연결된 직사각형의 중심에 있고 모서리의 끝이이 모서리가 연결된 다른 직사각형의 중심에 있다는 것입니다.올바른 순서로 물건을 그리기,

사각형과 가장자리 사이의 교차 선을 그리지 않으려면 가장자리와 가장자리를 먼저 그려 가장자리에 배치하여 교차를 숨 깁니다.

해당 가장자리에 해당하지 않는 다른 노드가 가장자리를 따라 배치 될 때 문제가 발생합니다. 이 시나리오에서는 가장자리가 먼저 그려지기 때문에 노드가 가장자리의 맨 위에 나타납니다. 그러나 그것은 내가 원하는 것이 아닙니다. 노드의 맨 위에 가장자리를 표시하고 싶습니다.

이미지 : how it ishow it should be

첫 번째 노드를 그리고 나중에는 연결되어있는 두 개의 노드와 가장자리의 교차점을 피하고 가장자리를 그리는 것이이 문제를 해결하는 내가 생각할 수있는 가장 포괄적 인 방법 . 그러나 그것은 내가 drawLine을 사용하여 모서리를 그려서 종이에하기가 어렵고 교차로를 확인할 가능성이 없습니다.

이 때문에 내가 먼저 가장자리를 그립니다,하지만 내가 언급 한 문제가 발생합니다. 어떤 아이디어?

+0

문제는 노드가 우선 순위와 같은 것을 가진 경우에만 해결할 수 있습니다. 그런 다음 노드의 우선 순위별로 정렬하여 그릴 수 있습니다. 먼저 노드의 연결을 렌더링 한 다음 노드를 렌더링하십시오. 노드를 폴링하기 위해 반복합니다.주문 기준과 같은 것이 없다면 올바른 하나의 솔루션이 없거나 올바른 솔루션으로 판단 될 수 있습니다. – Durandal

답변

0

문제 1에 대한 해결책이 필요합니다. 가장자리의 끝점을 사각형의 중심에서 "이동"시켜야합니다. 그렇게하면 노드를 마지막으로 그리지 않아도 자동으로 질문을 해결할 수 있습니다.

2 단계에서 제안 된 솔루션은 연결 노드가 왼쪽과 오른쪽에있는 경우에만 작동합니다. 그렇지 않으면 2.1 단계에서 약간 더 진보 된 수학이 필요합니다.

스텝 1 : 에지는 단지 Point이고, Point은 단지 xy 값이다. 각 모서리의 x을 비교하여 가장자리의 왼쪽 끝과 오른쪽 끝을 찾습니다. 간단하게하기 위해 xLeft, xRight, yLeft 및로 저장합니다. 어쩌면 당신은 이것에 대해 다른 것을 가지고 있을지 모르지만, 당신은 그 생각을 얻습니다.

2 단계 : xLeft을 오른쪽으로 이동하고 xRight에서 절반의 너비를 뺍니다.

(선택 사항) 2.1 단계 : 두 개의 연결 노드가 서로 위에있는 경우 Math.atan2(yRight-yLeft, xRight-xLeft)을 사용하여 각도를 계산할 수 있습니다. 값이 낮은 스펙트럼 (-3pi/4-pi/4 사이)에 있으면 각 y 값에서 사각형의 높이의 절반을 더하거나 뺍니다. 당신이 원한다면 이것으로 주위를 돌아 다니면서 모든 4 방향에 대한 수학과 논리를 만들 수 있습니다.

3 단계 : 노드를 그린 후 새 모서리를 그립니다. 가장자리는 이제 직사각형의 가장자리에 "연결"됩니다.

처음에는 코드에 넣으시기 바랍니다.