안녕하세요, 커뮤니티 회원 들께,Delaunay 삼각 측량 알고리즘 최적화
저는 최근에 cpp에서 Delaunay 삼각 측량을 구현하기 위해 노력해 왔습니다. 알고리즘이 작동하는 동안 .. 매우 느립니다 (약 100 초 객체는 약 16 초 내에 계산됩니다).
알고리즘은 무차별 대입 방식을 기반으로합니다. 점의 유한 집합을 감안할 때 :
- 내가
그 점에서 삼각형을 만들 수 있는지를 점검, 각 지점을 통해 세 번 반복하고 있습니다; - 이 세 가지 점에서 나는 그 점들을 통과하는 원을 만듭니다.
- 생성 된 원이 있는지 확인하고 네 번째 점 전체 집합을 반복합니다. 위의 세 점과 다른 점이 포함되어 있습니다.
- 원 안에 추가 점이 없으면이 세 점에서 생성 된 삼각형이 유효하다고 가정합니다.
앞서 언급 한 것처럼 알고리즘은 여기에 설명 된 Delaunay 삼각 측량의 직접 구현입니다. https://en.wikipedia.org/wiki/Delaunay_triangulation. 그것은 "완벽하게"작동하지만 느리다.
(가능한 경우 논리를 완전히 변경하지 않고) 속도를 높일 수있는 논리에 대한 아이디어 나 제안 사항이 있습니까?
당신은 허용 속도를하려면 논리를 변경해야합니다. 어떤 트릭을 사용하든, n^4는 매우 느릴 것이고, 합리적인 알고리즘은 nlog n입니다. –
일부 삼각형 범위에 대해 미리 정의 된 원 세트를 사용할 수 있습니까? 그런 다음 당신의 포인트가 이들 중 하나와 일치하는지 확인하십시오. – ldgorman
너무 적은 사람들이 알고있는 일반적인 팁을 드릴 것입니다 : 포인트가 원 안에 있는지를 확인할 때 제곱근을 취할 필요가 없습니다. – Jay