문제

사용자가 그린 "모양"이 주어지면, 나는 그것들이 모두 비슷한 크기와 방향을 갖도록 그것을 "정규화"하고 싶습니다. 우리가 가진 것은 포인트 세트입니다. Bounding Box 또는 Circle을 사용하여 크기를 근사화 할 수 있지만 방향은 조금 더 까다 롭습니다.

제 생각에 올바른 방법은 majoraxis 그것의 경계 타원. 그렇게하려면 계산해야합니다 고유 벡터공분산 행렬. 좋은 추정치를 찾고 있기 때문에 그렇게하는 것은 내 필요에 너무 복잡 할 것입니다. 최소, 최대 및 20 개의 랜덤 포인트는 일부 스타터가 될 수 있습니다. 이것을 근사화하는 쉬운 방법이 있습니까?

편집하다: 나는 찾았다 전원 방법 고유 벡터를 반복적으로 대략적으로. 위키 백과 기사. 지금까지 나는 좋아한다 다윗의 대답.

도움이 되었습니까?

해결책

몇 가지 간단한 공식으로 수행 할 수있는 2x2 매트릭스의 고유 벡터를 계산할 것이므로 그렇게 복잡하지 않습니다. 의사 코드에서 :

// sums are over all points
b = -(sum(x * x) - sum(y * y)) / (2 * sum(x * y))
evec1_x = b + sqrt(b ** 2 + 1)
evec1_y = 1
evec2_x = b - sqrt(b ** 2 + 1)
evec2_y = 1

선택한 포인트의 하위 집합이 전체 세트를 대표 할 것으로 예상되는 경우 추정치를 얻기 위해 일부 포인트 만 합산하여이를 수행 할 수도 있습니다.

편집하다: x와 y는 제로 평균으로 번역되어야한다고 생각합니다. (EED3SI9N).

다른 팁

여기에 생각이 있습니다 ... 포인트에서 선형 회귀를 수행하고 결과 라인의 기울기를 사용하면 어떻게해야합니까? 모든 포인트가 아니라면 적어도 샘플.

r^2 값은 또한 일반적인 모양에 대한 정보를 제공합니다. 0에 가까울수록 원형/균일 모양이 더 많습니다 (원/정사각형). 1에 가까울수록 모양이 더 많이 늘어납니다 (타원형/사각형).

이 문제에 대한 궁극적 인 해결책이 실행 중입니다 PCA
나는 당신이 언급 할 멋진 작은 구현을 찾을 수 있기를 바랍니다.

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