무엇을 구하는 가장 빠른 방법은 짧은 직교 거리를 사이에 두 개의 다각형

StackOverflow https://stackoverflow.com/questions/84034

문제

1 레드형50 무작위로 배치 블루 다각형 -그들은 그에 위치한 지리적 2D 공간.무엇이 가장 빠른/장 algorithim 을 찾기 위해 사이의 최단 거리 붉은 색과 가장 가까운 푸른 다각형?

베어 하는 마음에 그것은 간단한 케이스의 복용하는 점까지의 정점을 다각형으로 테스트할 값을 위해 거리로 그들은하지 않을 수도 있습니다 가장 가까운 점입니다.

그래서 결국-대답해야 돌려주고 가장 가까운 푸른 다각형수 빨간색 하나입니다.

이보다 더 열심히 그것을 소리입니다!

도움이 되었습니까?

해결책

나는 의심이 있는 것보다 더 나은 솔루션이의 거리를 계산한 한 빨간색와 모든 푸른 하나의와 정렬하여 이러한 길이 있습니다.

에 관한 정렬,일반적으로 퀵드에서 이길 성능(는 최적화되어 하나는 오프 컷 재귀하는 경우는 크기가 아래 7 항목하고 스위치가 다음과 같 InsertionSort,어쩌면 ShellSort).

따라서 질문은 얼마나 빨리 사이의 거리를 계산 두곤,한 후에 만들기 위해 필요한 모든 이산 50times.

다음과 같은 접근 방식은 3D 뿐만 아니라,그러나 아마 가장 빠른 중 하나:

최소곤 거리 2D 에서 공간

이 질문은 당신이 기꺼이 무역에 대한 정확성 속도입니까?E.g.포장할 수 있는 모든 다각형으로 경계 상자는 양쪽의 상자 평행하게 좌표계의 축이 있습니다.3D 게임을 사용하는 이 방법은 꽤 많습니다.그 때문에 당신은 당신을 찾아야의 최대값과 최소값을 모든 좌표계의(x,y,z)를 구성하는 가상 경계 상자입니다.계산의 거리를 이러한 경계 상자는 다음은 아주 사소한 작업입니다.

여기에 예를 들어 이미지의 더 진보된 경계 상자 평행하지 않은 좌표계 axes:

향의 경계 상자-끝없는 즐거움을 제공합니다.

그러나,이의 거리 계산에 덜 하는 것입니다.그것은 사용에 대한 충돌 감지,당신이 할 필요가 없이 거리를 알고 이를 위해,당신만이 알아야 할 하나의 가장자리에 하나의 경계 상자 내에있는 또 다른 경계 상자입니다.

다음과 같은 이미지는 축 정렬되고 경계 상자

축 정렬되고 경계 상자 AABB

OOBs 는 더 정확하고,AABBs 은 속도가 빨라집니다.어쩌면 이 기사를 읽:

Advanced 충돌 감지 기술

이것은 항상 가지고 있는 거래하고자하는 정밀한 속도이다.는 경우에는 정밀도보다 더 중요한 속도가 필요할 수 있습은 고급 기술이다.

다른 팁

할 수 있습니다 문제를 줄이기 위해,그리고 다음을 수행 집중 수색에서는 작은 설정합니다.

프로세스는 각각형에 의해 먼저 찾기:

  • 센터의 다각형
  • 최대 반경각형(즉,포인트에서 가장자리/표면/꼭지점 다각형의 가장 멀리서 정의 센터)

지금 수집할 수 있습니다 말하자면,5-10 가장 가까운 다각형 레드 중 하나는(을 찾는 거리센터 센터,빼 radius,목록을 정렬하고 최 5)그리고 훨씬 더 많은 철저한 루틴입니다.

을 위한 다각형 모양으로 적절한 수의 경계를 포인트 등에서는 GIS 또는 게임용할 수도 있습을 쉽게 일련의 테스트합니다.

에 대한 각 정점에 빨간각형을 계산하는 매우 정점에 파형을 찾아 가장 가까운(힌트를,비교 거리^2 그래서 당신은 필요하지 않 sqrt()) 을 찾아 가장 가까운,다음 확인을 꼭짓점의 각 측면에서 발견되는 빨간색과 파란색은 정점을 결정하는 라인 세그먼트에 가장 가까운 것을 찾는 가장 가까운 접근 방식 사이에 두 개의 라인 세그먼트가 있습니다.

http://local.wasp.uwa.edu.au/~pbourke/기하학/lineline3d/ (그것은 쉽게 단순한 2d 경우)

이 심사는 기법은 수를 줄이기 위해 거리의 계산을 수행 할 필요가에서 평균 경우,을 손상시키지 않고 정확도의 결과입니다.그것은 작품에서 볼록하고 오목한 다각형으로 구성됩니다.

을 찾아 사이의 최소 거리의 각 쌍의 정점은 것 중 하나는 정점에 빨간색과 하나은 파란색이다.전화 r.사이의 거리를 다각형에 가장 r.를 생성하는 새로운 지역에서 붉은 다각형은 각 세그먼트는 바깥쪽으로 이동하여 r 과 가을은 이웃에 의해 호의 radius r 에 중심이 정점입니다.를 찾아 거리에서 각각의 정점을 이 지역의 모든 라인의 세그먼트를 반대하는 색상과 교차하는 이 지역이다.

물론 추가할 수 있습니다 대략적인 방법과 같은 경계 상자를 신속하게 확인하는 파란색의 다각형의 가능성이 없습 교차와 빨간 지역이다.

난 당신이 말했다"가장 짧은 거리"하지만 당신은 정말 의미 있는 최적의 솔루션 또는"좋은/아주 좋은"솔루션에 대한 좋은 당신의 문제입니까?

기 때문에 필요하신 경우에는 최적의 솔루션을 찾을 수 있는,당신은 사이의 거리를 계산하기 위해 모든 당신의 원천과 목적지 하기 poligon 범위(지만 정점).는 경우에는 3 차원 공간에서 다음 각입니다.는 것은 큰 문제가 될 수 있습니다(O(n^2))방법에 따라 많은 정점을니다.

그래서 만약 당신이 정점을 계산하게 만드는 사각형을 스 캐 번호 및"좋은/아주 좋은"솔루션에 대한 좋은 당신,이동에 대한 솔루션을 휴리스틱 또는 근사입니다.

당신은 수도에서 보고 싶은 보로 노 컬링이라고도 합니다.종이 및 비디오 여기:

http://www.cs.unc.edu/~geom/DVD/

나는 것을 시작으로 경계 모든 다각형으로 경계 원고 그 후 찾기 상을 최소화한 거리입니다.그 다음에는 단순히 체크의 가장자리를 모든 푸른 다각형의 하의 거리보다 낮은 상한 최소한의 거리에 대한 모두의 가장자리에 빨간색 polygon.

upper bound of min distance = min {distance(red's center, current blue's center) + current blue's radius}

for every blue polygon where distance(red's center, current blue's center) - current blue's radius < upper bound of min distance
    check distance of edges and vertices

하지만 그것은 모든 데이터에 따라 달라.는 경우 푸른 다각형에 비해 상대적으로 작은 거리를 사이에 그들에게 그리고 붉은 다각형,그런 다음 이 접근 방식 작동해야 좋지만,그들은 경우 매우 가까운 당신이 저장되지 않아도(그들의 많은 것이 충분히 가까이).과 다른 것--는 경우 이러한 다각형이 없는 많은 꼭지점(같은 경우는 대부분의 삼각형을)수 있습니다 다음으로 거의 빠른을 확인하는 각 빨간색 가장자리에 대한 각 블루 가장자리입니다.

그것을 희망하는 데 도움이

으로 다른 사용하여 경계 지역(자,원)도록 허용할 수 있습을 폐기하는 어떤 다각형-다각형 상호작용이 있습니다.거기에 여러 가지 전략 이를 위해,예를 들어,

  1. 선택 블루각형을 찾아 거리에서 빨간색 하나입니다.이제 선택은 다른 다각형.는 경우에는 최소 사이의 거리는 경계 지역보다 큰 이미 발견 거리를 무시할 수 있습니다 이 다각형.계속한 다각형으로 구성됩니다.
  2. 최소리/중심 사이의 거리를 다각형 레드와 블루 다각형으로 구성됩니다.정렬 거리 및 고려하는 작은 거리를 처음이다.계산 실제 최소한의 거리를 계속해 정렬된 목록을 때까지 최대 사이의 거리를 다각형보다 크면 최소한 거리입니다.

당신의 선택의 원/축 방향으로 정렬 상자,또는 중심의 상자를 가질 수 있습에 중대한 영향 알고리즘의 성능에 따라 실제의 레이아웃을 입력됩니다.

실제로 최소한의 거리 계산에 사용할 수 있습 양 et al 의'새로운 빠른 알고리즘에 대한 컴퓨팅 사이의 거리를 두 가지 연결이 끊긴 볼록한 다각형에 따라 보로 노 다이어그램 있는'O(로그 n+로그 m).

가봐야하는 장례식에서 초,하지만 당신이 당신의 다각형으로 볼록한 subpolies,거기에 몇 가지 최적화할 수 있습니다.당신이 할 수 있는 바이너리에서 검색 각 폴리를 찾는 가장 가까운 꼭지점,그리고 나 믿 가장 가까운 포인트 중 하나여야 합는 꼭지점,또는 인접 가장자리입니다.즉,당신이 할 수 있어야에서 log(log m * n) 어디 m 이 평균 수의 정점에 많은,n 의 수 polies.이 종류의 hastey,그래서 잘못 될 수 있습니다.더 자세한 정보를 제공합니다 나중에 원하는 경우.

당신은 시작할 수있는 비교를 통해 사이의 거리는 경계 상자입니다.테스트 사이의 거리는 직사각형을 보다 쉽게 테스트하는 사각형,그리고 당신이 할 수있는 즉시 제거하는 다각형은 더 이상 nearest_rect+its_diagonal 다(아마도 당신을 구체화할 수 있는 그 이상).그런 다음을 테스트할 수 있습니다 나머지 다각형을 찾기 위해 가장 가까운 다각형.

기 위한 알고리즘을 찾는 것 폴리곤 호텔에-난키는 좋은 그들의 리뷰.만약 내가 정확하게 기억,그만 허용 볼록한 다각형은 실질적으로 더 빠르다.

내가 믿는 당신이 찾고있는 무엇이*알고리즘,그것의 사용에서 길 찾기.

순진한 방법을 찾기 위해 사이의 거리에 빨간 50 블루 개체-그래서 당신이 찾고있는에서 50 3d 피타고라스 계산+정렬하는 답을 찾을 수 있습니다.는 것만이 정말로 일을 찾기 위해 사이의 거리 센터합니다.

당신이 원하는 임의의 다각형,어쩌면 당신의 최고의 가장 좋은 레이트레이싱 솔루션을 방출하는 광선의 표면에서 붉은 색과 관련하여 일반 및 보고서에서 다른 다각형이다.

하이브리드 작동 수 있습니다-우리를 찾을 수 있습에서 거리 센터 포인트를 가정하면,우리는 몇 가지 개념의 상대적 크기의 파란 다각형을,우리는 수집한 결과를 설정하는 가장 가까운 사이에 그는,다음 사용하 raytracing 를 좁히 진정으로 가장 가까운 다각형(s).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top