Лучший способ найти соотношение сторон - PullRequest
1 голос
/ 08 апреля 2011

Я пишу простую игру OpenGL с Haskell.Всякий раз, когда пользователь изменяет размеры окна, я получаю их ширину и высоту.Мне нужно рассчитать наибольшую ширину и высоту, которая вписывается в их окно при сохранении отношения W / H 1,6.

Это то, что я написал.Это работает, но я не думаю, что это лучший способ сделать это в Haskell.Может кто-нибудь предложить несколько альтернатив:

fixedRatio = 1.6

keepRatio (w,h) = head [(floor w',floor h') | w' <- [w, h*fixedRatio], h' <- [h, w/fixedRatio], w' <= w, h' <= h, w'/h' == fixedRatio ]

Ответы [ 2 ]

4 голосов
/ 08 апреля 2011

Я бы сделал это с охраной (условие):

keepRatio (w,h) | w > expectedWidth = (floor expectedWidth, h)
                | otherwise         = (w, floor(fromIntegral w / fixedRatio))
                where expectedWidth = fromIntegral h * fixedRatio
1 голос
/ 09 апреля 2011

Попробуйте это:

keepRatio (w,h) = min sizeByWidth sizeByHeight
   where sizeByWidth = (w, (w * 5) `div` 8)
         sizeByHeight = ((h*8) `div` 5, h)

Это предполагает, что вам нужно только соотношение сторон до ближайшего пикселя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...