8

저는 UI의 일부로 선택할 수있는 기본보기에 많은 시각적 요소를 표시하는 Mac OS X 응용 프로그램을 개발 중입니다. 이러한 요소는보기 내 어디에서나 배치 할 수 있습니다. UI는 요소를 선택하는 다양한 방법을 지원합니다 : 사각형 선택 윤곽 선택, 타원 선택 윤곽 선택 및 '무료'올가미 선택.올가미 선택 도구를 구현하는 알고리즘은 무엇입니까?

이미 직사각형 및 타원형 선택 윤곽 선택 작업이 있습니다. 알고리즘은 매우 간단합니다. 요소의 영역이 사각형/타원의 영역과 교차하는 경우 요소는 '선택됨'으로 간주됩니다.

올가미 선택은 Photoshop과 같은 최신 이미지 조작 응용 프로그램 에서처럼 작동합니다. 사용자는 자신을 닫을 경로를 클릭하고 드래그 할 수 있으며 그려진 경로 내에 포함 된 요소가 선택됩니다.

이 알고리즘은 직사각형/타원 선택보다 훨씬 복잡 할 수 있습니다. 왜냐하면 선택의 형태가 제한되지 않기 때문입니다. 누군가가 이런 식으로 글쓰기를 해 본 경험이 있거나, 프로그래밍 기술의 종류가 무엇인지에 관해 올바른 방향으로 가르쳐 줄 수 있다면 궁금합니다.이 알고리즘이 작동하는 가장 효율적인 방법은 무엇입니까?

미리 감사드립니다.

+0

안녕하세요. CJ,이 기능에 대한 코딩을 완료했다면 샘플 코드 링크를 붙여주세요. 그것은 다른 사람들을 위해서뿐만 아니라 저를 위해 정말로 도움이 될 것입니다. 우리의 많은 시간을 절약 할 수 있습니다. 당신의 도움을 기대합니다. – Gyanendra

답변

7

제가 생각할 수있는 유일한 방법은 올가미 개요를 다각형으로 처리하는 것입니다. 그런 다음 표준 point-inside-polygon test을 사용하여 선택할 요소를 확인할 수 있습니다.

다각형이 교차 할 때 무엇을해야할지 결정해야합니다 (예 : figure-8).

다각형을 구성 할 때 너무 많은 점을 얻지 못하게하려면 이전 점에 너무 가까운 점 (응용 프로그램에 따라 3 픽셀 정도)을 건너 뛸 수 있습니다.

+0

감사합니다. 이것이 내가 필요한 것입니다. 위키 피 디아 페이지에서 샘플 코드와 문제의 수학을 보여주는 리소스를 찾았습니다. http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html. 이 알고리즘은 나를 위해 꽤 잘 작동합니다. 사용자 올가미가 꽤 좋은 성능을 가진 영역을 선택함에 따라 점진적으로 알고리즘을 사용할 수도 있습니다. 이제 포인트를 폴리곤에 추가하는 빈도를 최적화하는 로직을 작성합니다. 마지막 점 사이의 거리뿐만 아니라 이전 선분의 각도의 기울기/기울기를 비교합니다. –

2

다각형 문제의 한 지점을보고 있습니다. http://en.wikipedia.org/wiki/Point_in_polygon 다각형이 볼록 (가능하지 않음)하다는 것을 보장 할 수 있으면 알고리즘이 더 간단 해집니다.

+0

올가미 선택은 일반적으로 반드시 다각형이 아니며 닫힌 경로 일 수 있습니다. 예를 들어 Photoshop에서는 올가미 도구와 다각형 올가미 도구가 있습니다. –

+1

닫힌 패스는 많은 수의 점이있는 다각형입니다. Photoshop의 선택기는 다각형의 유한 객체 수와 하나의 다각형 단위 = 하나의 객체로 인해 더 쉽게 최적화 할 수 있습니다. –

0

프리 핸드 올가미 도구의 경우 매우 간단한 해결책을 취할 수 있습니다. 선택 영역 테두리의 모든 점을 사전에 저장하십시오. x을 키로 사용하고 (y1, y2)을 값으로 사용합니다 (여기서 y1 <= y2). 그런 다음 모두 x'을 반복하고 dict에 항목이 있는지 확인하십시오. 그렇다면, 모든 포인트는 x' = xy >= y1 and y <= y2입니다.

최상의 해결책은 아닐지 모르지만 작동해야합니다.

관련 문제