나는 점의 두 배열을 갖는다. 예 :매트릭스/좌표 변환 순서
matrix.Rotate(5f);
matrix.Scale(.8f, 1.1f);
matrix.Translate(30f, 18f);
matrix.TransformPoints(transformed);
- 원래 포인트 알려진이다.
- 변형 값 ARE이 알려져 있습니다.
- 변형이 적용된 순서는 NOT입니다.
어떻게 변환 순서를 계산할 수 있습니까?
편집
- 변환의 한 라운드있다.
- 라운드에는 다음과 같이 최대 3 개의 변환이 포함될 수 있습니다.
- 적용되는 유일한 변형은 회전, 축척 및 평행 이동의 모든 조합입니다.
실제 상황을 알려면 관심이있는 알려진 지점이있는 이미지를 고려하십시오. 이미지를 인쇄하고 스캔 한 다음 다시 읽으려고합니다. 이미지에는 스캔 과정에서 적용된 변형을 계산할 수있는 방향 표시가 있습니다.
지금, 무력 접근 방식은 다음과 같습니다- 읽기 스캔 한 이미지.
- 스캔 한 이미지에서 회전을 계산합니다.
- 스캔 한 이미지에 회전을 적용하십시오.
- 회전 된 이미지의 눈금을 계산합니다.
- 회전 된 이미지에 눈금을 적용하십시오.
- 크기 조정 된 이미지의 번역을 계산합니다.
- 크기 조정 된 이미지에 번역을 적용하십시오.
원본 포인트를 사용하여 처리 된 이미지에서 관심 지점을 읽을 수 있습니다. 물론이 방법은 비용이 많이 든다. 500MB 이미지는 한 번에 메모리에 적어도 2 개의 사본이 있어야하며 그래픽 객체를 사용하여 변환해야합니다.
이 질문의 전제는 이미지를 한 번만 읽고 모든 변환을 계산하여 이미지 자체가 아닌 좌표에 적용하는 것이 었습니다. 변환 된 좌표를 사용하여 관심 지점을 읽습니다. 여기서 '변환 순서'의 문제가 발생합니다. 아래의 유용한 답변 중 일부는 문맥을 깨끗이하기를 바랍니다.
몇 개의 변환이 있습니까? 그것은 나에게 그것이 많은 짐승이 아닌 한 무자비한 접근법이 가장 쉽고 좋을 것이라고 생각합니다. 만약 당신이 많은 것을 가지고 있다면, 당신은 여전히 복잡한 일들을 분석하지 않고 무차별 적 접근이 필요할 것입니다.또한 고유 솔루션을 찾을 수 있다고 보장 할 수 없습니다 (예 : 두 개의 번역이 연속적으로 바뀔 수 있음). – Chris
나는이 문제를 해결할 수 있다고 생각하지 않는다. 예를 들어 번역 기능은 모든 단계에서 수행 될 수 있습니다. 최종 결과는 동일합니다. – musefan
@ 뮤즈 팬 : 실제로 번역에 해당하지 않습니다. 첫 번째 점이'0,1 '이고 두 변환이'0, -1'에 의한 변환이고 원점에 대한 180도 회전이라는 것을 상상해보십시오. 분명히 회전 전에 번역을하는지 여부가 중요합니다. 같은 논의가 스케일링에도 적용됩니다. – Chris