2010-04-27 3 views
1

광산 어플리케이션 중 하나에서 그래픽 오브젝트를 다루고 있습니다. 오픈 소스 GPC library을 사용하여 두 모양을 클립/병합합니다. 정확성을 높이기 위해 기존 모양을 샘플링 (두 가장자리 사이에 여러 점 추가)했습니다. 하지만 병합 된 모양을 다시 표시하기 전에 두 모서리 사이의 모든 점을 제거해야합니다.동일한 슬로프로 점을 효율적으로 제거하십시오.

그러나 최소 CPU 사용률과 동일한 기울기를 가진 두 에지 사이의 모든 지점을 제거하는 효율적인 알고리즘을 찾을 수 없습니다. 현재 모든 점은 내가 큰 도움이 될 것이에 다음과 같은 기능을

private float Slope(PointF point1, PointF point2) 
    { 
    return (point2.Y - point1.Y)/(point2.X - point1.X); 
    } 

모든 포인터를 사용하여 경사를 계산하고

PointF 

유형

의이다.

+2

더 구체적인 제목이 도움이 될 것입니다. – MichaelB76

+1

ASCII 아트를 그리면 무슨 뜻인지 알 수 있습니까? 그들은 그림이 천 단어를 그렸고, 그것은 누군가가 당신의 요구 사항을 이해하는 데 정말로 도움이 될 것이라고 말합니다. – Skizz

답변

0

음 .. 내 질문에 대한 해결책을 찾았습니다. SDK에서 제공하는 Sampling 메서드를 사용하는 대신 고정 된 거리에서 두 점 사이에 점을 삽입하는 자체 샘플링 메서드를 만들었습니다. 이렇게하면 처리해야하는 포인트가 줄어들고 프로세서 사용량이 줄어 듭니다.

1

현재 사용중인 알고리즘은 무엇입니까? 나는 오직 모든 점을 통과하고 각각의 3 점이 더 큰 중간점을 확인하는 것은 다른 두 점에 의해 정의 된 벡터 (또는 가까운)에 있다고 생각할 수 있습니다. 그 연산에 수학이 필요합니까?

+0

현재 기울기가 첫 번째 점과 마지막 점의 기울기와 비슷한 경우 모든 점을 반복하여 중간 점을 제거합니다. 그러나이 작업은 훨씬 더 많은 시간이 걸립니다. 이 작업을 위해 최적화 된 수학을 찾고 있습니까 – Ram

+0

(단일) 점의 기울기는 어떻게 계산합니까? –

+0

@ Ravi : 다음 함수를 사용하여 기울기를 계산합니다. 프라이빗 플로트 슬로프 (PointF point1, PointF point2) { return (point2.Y - point1.Y)/(point2.Y - point1.Y); } – Ram

0

AE가 C를 거쳐서 C를 지나치는 지 궁금하게 생각하면 A = (a, b), C = (c, d), E = 세그먼트 AC와 CE의 쌍을 단일 세그먼트 AE로 대체 할 수 있습니까?

기울기 AC = (dB)/(캘리포니아) = 기울기 CE = (FD)/(EC) 분모로 곱셈을 통해

, 당신은 (dB) (EC) = (FD) (CA를 얻을 수)

이것은 단지 4 개의 뺄셈, 2 개의 곱셈 및 비교입니다. 부동 소수점을 사용하기 때문에 오류 허용 오차를 비교해 볼 필요가 있습니다.

관련 문제