2010-04-27 4 views
2

사용자는 아주 간단한 도구 (LMB를 들고 마우스를 움직여야 함)를 사용하여 내 응용 프로그램에서 스케치 할 수 있습니다. 이로 인해 일련의 mousemove 이벤트가 발생하고 각 이벤트마다 커서 위치가 기록됩니다. 결과 폴리 라인 커브는 거의 모든 다른 픽셀을 기록한 점으로 밀도가 높습니다. 이 pixelized 폴리 라인을 부드럽게하고 싶습니다만, 의도 된 꼬임을 부드럽게하고 싶지는 않습니다. 그렇다면 어떻게 꼬임이 있는지 알아낼 수 있습니까?그려지는 폴리선의 꼬임 감지

이미지에 기록 된 흔적 (빨간색 픽셀)과 인간이 이해할 수있는 '암시'모양이 표시됩니다. 사람들은 모서리 근처에서 속도를 줄이는 경향이 있으므로 일반적으로 직선 비트보다 노이즈가 훨씬 더 많습니다. 이 글은 온다

Polyline tracker http://www.freeimagehosting.net/uploads/c83c6b462a.png

+0

빨간 선은 마우스 움직임이있는 지점입니까, 아니면이 지점 사이의 선을 채웠습니까? 당신이 점수 목록을 줄 수 있고 그것을받은 시간이 있다면, 유용한 대답의 확률이 더 높아질 것입니다. – clahey

+0

음, 방금 그 이미지를 그렸습니다. 때로는 샘플 사이에 빈 픽셀이 여러 개 있지만 그 일이 발생하려면 매우 빠르게 움직여야합니다. –

답변

1

제스처 인식 기술과 관련이있을 수 있으므로 아이디어를 검색 할 수 있습니다.

커브 피팅을 적용하는 것이 확실하지만 모든 흥미로운 세부 사항과 꼬임을 부드럽게하는 효과가 있습니다. 제안 된 또 다른 접근법은 속도와 가속도를 살펴 보는 것입니다. 그러나 방향이 바뀌면 방향이 매우 빠르거나 느려질 수 있습니다.

상당히 기본이지만 효과적인 방법은 샘플을 폴리 라인으로 직접 단순화하는 것입니다.

예를 들어 샘플 1에서 샘플 4까지의 샘플을 통과 한 후 모든 4 개의 샘플이 1 & 사이의 직선의 합리적인 오류 내에 있는지 확인하십시오. 4. 그렇다면이 값을 확장하십시오. 시작점에서 끝점까지의 직선이 더 이상 이러한 샘플에 의해 정의 된 곡선에 공진적인 근사를 제공하지 않을 때까지 반복합니다. 이전 샘플 지점까지 선 세그먼트를 작성하고 새 선 세그먼트를 축적하십시오.

샘플이 서로 너무 가까울 때 임계 값에주의해야하므로 서로 4-5 픽셀 떨어져 샘플을 구분할 때 민감도를 조정할 수 있습니다.

이렇게하면 원래 경로를 상당히 정확하게 따라갈 일련의 직선을 얻을 수 있습니다.

추가 스무딩이 필요하거나 확장 가능한 벡터 그래픽을 만들려는 경우 폴리 라인에서 곡선 맞춤을 적용 할 수 있습니다. 먼저 꼬임 (폴리선에서 한 선과 다음 선 사이의 각도가 예리한 곳 - 예 : 140도 이상은 매끄러운 커브로 간주되고 그 이하는 꼬임으로 간주됩니다)을 식별하고 불연속 점에서 폴리 라인을 끊습니다 . 그런 다음 원본 제스처의 각 하위 섹션을 커브로 맞추어 부드럽게 만듭니다. 이것은 매끄러운 물건을 매끄럽게하고 꼬임을 날카롭게하는 효과를 가질 것입니다.(조인의 날카로움을 줄이기 위해이 날카로운 관절 대신 작은 모서리 필렛을 삽입하여 더 멀리 갈 수 있습니다.)

무언가가 원하는대로 얻을 수 있습니다.

1

오히려 결과 데이터에서이 작업을 수행하는 것보다, 당신은 데이터의 타이밍을보고 생각 해 봤나? 마우스가 멈추거나 눈에 띄게 느려지는 경우, 마지막 '꼬임'(마우스가 마지막으로 느려졌을 때) 이후 트렌드를 사용하여 이동 방향을 설정합니다. 사용자가 새로운 방향으로 벗어나면 꼬임이라고 부르며, 그렇지 않으면 현재 감속 추세를 무시하고 다음 추세를 기다립니다.

+0

꽤 좋은 생각입니다. 사람들은 때로는 멈추고 똑바로 짚고있을 때 생각하고 멈추고 시작하는 행동은 거의 항상 꼬임이 생길 것이므로 몇 가지 추가적인 논리가 필요할 것입니다. 그러나 이것이 좋은 징조라고 생각합니다. –

+1

그래서 내가 방향 전환과 함께 오지 않은 모든 일시 중지를 무시하는 것이 좋습니다. 또는 감지 된 픽셀과 계산 된 곡선을 아래로 내리고 꼬임을 삽입하려는 스케치를 클릭 할 수 있습니다. 조만간 두 가지를 모두 수행해야합니다. 완전 자동화 된 프로세스가 누군가 필요한 모든 것을 수행하지는 않습니다. 그것은 컴퓨터 인터페이스의 법칙입니다. =] – Sniggerfardimungus

1

글쎄, 한 가지 방법은 진정한 곡선 피팅 알고리즘을 사용하는 것입니다. 정확한 종점이있는 Catmull-Rom 등을 사용하여 베 지어 곡선을 생성 한 다음 &을 재귀 적으로 (실제 회선 점으로부터 거리를 비용 메트릭으로 사용하여) 최적화합니다. 이 경우 사용자의 용도에 따라 너무 복잡 할 수 있습니다.

+0

CAD 응용 프로그램에서 실행 중이므로 일부 하드 코어 곡선 알고리즘을 사용할 수 있습니다. 그러나 모든 피팅/재구성/단순화/다듬기 실험은 매끄러운 폴리 라인 제작에만 성공했습니다. 기록 된 폴리 라인에서 꼬임이 있어야하는 위치를 파악할 수만 있다면 세그먼트 사이에 맞출 수 있습니다 ... –

0

픽셀이 그려지는 순서를 기록한 다음 "가까이에 있지만 닫히지 않은"픽셀 사이의 기울기를 계산하십시오. 나는 픽셀 (i)과 픽셀 (i + 7) 사이의 기울기 그래프가 곡선의 꼬임 주위에 쉽게 식별 할 수있는 "점프"를 나타낼 것이라고 추측하고 있습니다.

관련 문제