2012-02-24 3 views
5

-webkit-transform: rotateX(rotation in deg);을 사용하여 3D로 회전하는이 회전식 회전 장치가 있습니다. 그것에는 창을 중심으로하는 36deg마다를 의미하는 10 개의 판이 있습니다.회전판에서 가장 가까운 창의 회전 각도를 계산하는 방법

이제는 touchend 이벤트에서 호출되는 "스냅인"효과를 만들고 가장 가까운 창을 앞에 가운데 놓습니다.

내 문제는 임의의 회전 값에서 -1820도라고 말합니다. 가장 가까운 창은 어느 정도 또는 어느 정도 계산되어 있습니까?

희망이 있습니다. 힌트를 많이 주시면 감사하겠습니다.

답변

4

내가 잘 이해하지 못한다면, 모듈러스 연산자를 사용해야합니다. 이것은 부분적으로 나머지 부분이며, wg3schools에 따라 백분율 기호 %로 정의됩니다.

예 : 5 % (2) 귀하의 경우에는 1

당신이

var initialAngle= getAngle(); //let's say it's 1820 
var closestPane= initialAngle%36; //which gives you 20. 

처럼 semthing 할 수 그래서 지금은 이전 각도로 각도 resepct의 위치를 ​​알고 같다 (하자 전화 그것). 간단한 조작 (36-20 = 16)을 추가로 수행하면 다음 각과의 거리도 알 수 있습니다.

angle before ---- A ---- angle after 
      20deg 16deg 

희망이 ..

여기
+0

어쩌면 거기에 뭔가가 있지만 필요한 것은 -1820에서 최대 -36 인 각도입니다. – jenswirf

+0

Ok modulo 연산자를 더 잘 이해하기 위해 –

+0

을 편집합니다. 필요하다면 'modulo는 기본적으로'첫 번째 숫자에서 두 번째 숫자를 멀리 유지합니다. 더 이상 수행 할 수 없을 때 음수로 남겨지면 남은 것은 대답 " '입니다. 여기에 게시되었습니다 http://ask.metafilter.com/43903/Help-me-understand-modulus-operators. –

0

내가 Danele B의 입력을 기반으로 결국 무엇 내가이 글을 쓰는의 깔끔한 방법이있을거야

function snapToAngle(Angle) { 
var deltaAngle = Math.abs(Angle)%36; 

    if (Angle >= 0) { 
     (deltaAngle <= 18) ? Angle -= deltaAngle : Angle+=36-deltaAngle; 
    } else { 
     (deltaAngle <= 18) ? Angle += deltaAngle : Angle -= 36-deltaAngle; 
    } 
return Angle; 
} 

도움이되지만 그것은에 보인다 작동 ..

관련 문제