2017-02-18 12 views
1

я могу получить ограничительную рамку обрезного или повернутого прямоугольника, используя эту формулуПолучить ограничительную рамку стриженных и вращать прямоугольник

shearedW = Abs(Tan(shearX) * Height) + Width 
shearedH = Abs(Tan(shearY) * Width) + Height 
rotatedW = Abs(Cos(angle) * Width) + Abs(Sin(angle) * Height) 
rotatedH = Abs(Sin(angle) * Width) + Abs(Cos(angle) * Height) 

Но как совместить эти? Мне просто нужно знать ширину и высоту. Преобразование осуществляется сдвигом, а затем вращением формы.

ответ

1

Просто создайте аффинную матрицу для комбинированного преобразования и примените ее к вершинам, затем получите разности для y- и x-координат.

Обратите внимание, что первая пара формул неверна - она ​​дает дополнительную ширину и длину. Полная ширина:

shearedW = Width + Abs(Tan(shearX) * Height) 
+0

Да, это не самый эффективный алгоритм с точки зрения количества операций для этого конкретного случая, но он прост и может быть легко обобщен на различные формы и преобразования. –

+0

Ну, это будет работать, но мне нужно получить измерение, прежде чем делать трансформацию. Отредактировано, чтобы включить исправленную формулу. – user7583269

+0

Вы считаете несколько повернутых параллелограммов. Обратите внимание, что две ножницы по двум осям эквивалентны сдвигу + масштабирование + вращение, поэтому стоит четко определить разрешенные преобразования и результирующие цифры. – MBo