0
변환 된 사각형의 경계 상자를 계산하는 데 다음 알고리즘을 사용하고 있지만 문제가있는 것으로 보입니다.System.Numerics를 사용하여 변형 된 사각형의 경계 상자를 올바르게 계산하십시오.
public static Rectangle GetBoundingRectangle(Rectangle rectangle, Matrix3x2 matrix)
{
Vector2 leftTop = Vector2.Transform(new Vector2(rectangle.Left, rectangle.Top), matrix);
Vector2 rightTop = Vector2.Transform(new Vector2(rectangle.Right, rectangle.Top), matrix);
Vector2 leftBottom = Vector2.Transform(new Vector2(rectangle.Left, rectangle.Bottom), matrix);
Vector2 rightBottom = Vector2.Transform(new Vector2(rectangle.Right, rectangle.Bottom), matrix);
Vector2 min = Vector2.Min(Vector2.Min(leftTop, rightTop), Vector2.Min(leftBottom, rightBottom));
Vector2 max = Vector2.Max(Vector2.Max(leftTop, rightTop), Vector2.Max(leftBottom, rightBottom));
return new Rectangle(0, 0, (int)(max.X - min.X), (int)(max.Y - min.Y));
}
이 기능은 회전에는 적합하지만 기울이기에는 적합하지 않습니다. 아래 이미지에서 볼 수 있듯이 수식에서 계산 된 사각형이 너무 작습니다. 누구든지 문제가 무엇인지 파악하거나 이미 사용할 수있는 System.Numerics
네임 스페이스 내에 메서드가 있습니까?
Matrix3x2.CreateRotation(radians, origin)
기울이기 - 매트릭스 공식
Matrix3x2.CreateRotation(radiansX, radiansY, origin)
나는 우리가 모두 자바 스크립트 테스트를 [여기] 일치하는 동일한 결과를 반환하는 생각 (http://jsfiddle.net/jamessouth/53302x4w/embedded/) 그래서 수식이 실제로 맞다고 생각합니다. 이상하게도 충분히 커 보이지는 않습니다. –