2011-04-08 4 views
1

저는 하스켈과 함께 간단한 OpenGL 게임을 작성하고 있습니다. 사용자가 창 크기를 조정할 때마다 너비와 높이가 표시됩니다. 1.6의 W/H 비율을 유지하면서 창 내부에 맞는 가장 큰 너비와 높이를 계산해야합니다.가로 세로 비율을 찾는 가장 좋은 방법

이것은 내가 작성한 것입니다. 그것은 작동하지만 나는 그것이 하스켈에서 그것을하는 가장 좋은 방법이라고 생각하지 않습니다. 누군가가 어떤 대안을 제안 할 수 있습니다 :

keepRatio (w,h) | w > expectedWidth = (floor expectedWidth, h) 
       | otherwise   = (w, floor(fromIntegral w/fixedRatio)) 
       where expectedWidth = fromIntegral h * fixedRatio 

답변

4

을 나는 가드 (조건)와 함께 할 것 가장 가까운 픽셀에 대한 비율.

1

이 시도 :

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

이것은 당신은 화면을 필요로한다고 가정

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 ] 
+0

이 경우'minBy (fst 비교) '대신'min'을 말할 수 있습니까? – dave4420

+0

예! 인스턴스 (Ord a, Ord b) => Ord (a, b)를 잊어 버렸습니다. 그에 따라 편집 됨. –

관련 문제