그래픽 컨텍스트에서 벡터를 그리는 일련의 Java2D 호출이 있습니다. 이미지의 크기가 두 배로 커지고 90도 회전해야합니다. 나는이 작업을 수행하려면 다음 코드를 사용하고회전 및 크기 조정 - 둘 다 수행하고 올바른 결과를 얻는 방법?
:
Graphics2D g2 = // ... get graphics 2d somehow ...
AffineTransform oldTransform = g2.getTransform();
AffineTransform newTransform = (AffineTransform)oldTransform.clone();
newTransform.concatenate(AffineTransform.getTranslateInstance(x1, x2));
newTransform.concatenate(AffineTransform.getScaleInstance((double)newW/(double)iconW, (double)newH/(double)iconH));
newTransform.concatenate(AffineTransform.getRotateInstance(Math.toRadians(rotationAngle), (double)iconW/2.0d, (double)iconH/2.0d));
// ... do my drawing ...
이 회전하고 스케일은, 그러나, 규모가 내가 원하는 방식으로 적용되지 않습니다. 이것은 마치 스케일링 전에 회전되어 잘못된 축에서 이미지가 넓어지는 것과 같습니다.
더 좋은 방법이 있나요?
좋아,이 작동하지만, 그것을 이해하지 않습니다. 먼저 번역을 적용하는 것이 좋습니까? 즉, 번역이 처음이라면 먼저 일어납니다. 그러나 회전이 처음 적용될 때도 축척 후에 회전이 발생합니까? 거기에 뭔가 이해가 안되네. – jsight
변환이 여전히 올바르게 작동하는 이유를 정확하게 설명하기는 어렵지 만 기본 매트릭스 수학을 살펴보면 왜 의미가 있는지 알 수 있습니다. –