2010-07-21 3 views
0

북쪽은 0, 북북서는 15까지의 정수 값 (열거 형)을 사용하여 바람 방향을 나타냅니다.풍향이 지정된 범위 내에 있는지 확인하십시오.

바람의 방향 (0에서 15 사이의 정수)이 특정 범위 내에 있는지 확인해야합니다. 내 WindDirectionFrom 값을 먼저 시계 방향으로 WindDirectionTo으로 지정하여 허용 풍향의 범위를 지정합니다. 물론

및 풍향 (N 및 E 방향 사이)이다 NE (2) 계산이 간단 WindDirectionFrom=15WindDirectionTo=4 풍향을 받았다고 다른 케이스 그러나

int currentWindDirection = 2; 
bool inRange = (WindDirectionFrom <= currentWindDirection && currentWindDirection <= WindDirectionTo); 
       //(0 <= 2 && 2 <= 4) simple enough... 

이다 WindDirectionFrom=0WindDirectionTo=4 경우 NE (2) 다시 계산은 즉시

bool inRange = (WindDirectionFrom <= currentWindDirection && currentWindDirection <= WindDirectionTo); 
       //(15 <= 2 && 2 <= 4) oops :(

내가이 너무 어려울 수 없습니다 확신 ... 나누기,하지만 난이 하나 진정한 정신 블록을 보내고 있습니다.

답변

1

내가 이런 식으로 할 것 :.

int normedDirection(int direction, int norm) 
{ 
    return (NumberOfDirections + currentDirection - norm) % NumberOfDirections; 
} 

int normed = normedDirection(currentWindDirection, WindDirectionFrom); 
bool inRange = (0 <= normed && normed <= normedDirection(WindDirectionTo, WindDirectionFrom); 
2

원하는 것은 모듈러 산술입니다. 산술 모드 16을 수행하고 그 차이가 적어도 14 (모듈에 해당하는 -2) 또는 많아야 2인지 확인하십시오.

모듈 식 산수 계산 방법은 언어에 따라 다릅니다. 다음과 같이 C 또는 C++로, 당신은 X 모드 16을 찾아 낼 것입니다 :

int xm = x % 16; 
if (xm < 0) xm += 16; 

(감사 enum의 산술 자주 허가되어 있지 않은 것을 지적 MSW, 그리고 좋은 이유에 enum은 일반적으로 개체 또는 조건을 나타냅니다. 이산하지 산술적으로 관련되는)

+0

아 오른쪽 잘 나는 내가 당신으로 거의 동일한 구문이 될 것 같아요 C#을 사용하고있어 ' 여기있어. –

+0

많은 언어가 열거에 대한 산술 연산을 허용하지 않는다는 점을 제외하고는 정당합니다. OP는 열거 형을 숫자로 가져와야합니다. – msw

관련 문제