Как пропорционально (с учетом соотношения сторон) масштабировать прямоугольник? - PullRequest
3 голосов
/ 17 мая 2011

Я пытаюсь просто взять определенное поле x на y и увеличить его, либо установив x и найдя y, либо наоборот. Как бы эта формула была выражена в Python (для удобства чтения). Я пытаюсь поместить эту коробку в большую коробку так, чтобы внутренняя коробка всегда помещалась в большую коробку.

Ответы [ 3 ]

6 голосов
/ 17 мая 2011

Примечание: я не делаю Python, так что это псевдокод.

Вам нужны относительные пропорции двух блоков, поскольку они определяют, какая из новых осей должна быть одинакового размеракак новая коробка:

r_old = old_w / old_h
r_new = new_w / new_h

if (r_old > r_new) then
   w = new_w              // width of mapped rect
   h = w / r_old          // height of mapped rect
   x = 0                  // x-coord of mapped rect
   y = (new_h - h) / 2    // y-coord of centered mapped rect
else
   h = new_h
   w = h * r_old
   y = 0
   x = (new_w - w) / 2
endif
6 голосов
/ 17 мая 2011

new_y = (float(new_x) / x) * y

или

new_x = (float(new_y) / y) * x

0 голосов
/ 17 мая 2011
>>> import fractions
>>> x, y = 10, 10
>>> fix_rat = fractions.Fraction(x, y)
>>> fix_rat
Fraction(1, 1)
>>> x = 8
>>> if fractions.Fraction(x, y) != fix_rat:
    y = x / fix_rat #well instead of y you should put the last one that has been changed
                    #but this is just an example


>>> y
Fraction(8, 1)
>>> 
...