atan2 의 결과의 부호(+,-) 값이 반전되어 나올때 어떻게 해결해야 할까요?

조회수 1008회

안녕하세요. 안드로이드로 간단한 게임을 만들던중 수학 식(atan2의 리턴값)에 막혀 질문드립니다.

저는 터치 좌표를 이용하여 View를 Rotate 시키고자 합니다.

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch(event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    touchStartAngle = getPositionAngle(x, y);//
                    currentAngle = getPositionAngle(x, y);//내가 터치한 지점이 원의 각도상 어떤곳에 위치하는 가
                break;
                case MotionEvent.ACTION_MOVE:
                    touchStartAngle = currentAngle;
                    currentAngle = getPositionAngle(x, y);

                    double diff = new BigDecimal(String.valueOf(currentAngle)).subtract(new BigDecimal(String.valueOf(touchStartAngle))).doubleValue();
                    double degrees = Math.toDegrees(diff);
                break;
                case MotionEvent.ACTION_UP:
                startRotate(degree);//구한 각도 값으로 애니메이션 시작
                break;
    }
}
 private double getPositionAngle(double xTouch, double yTouch) {
        //pivot 은 가운데 기준이되는 점
        double x = xTouch - getPivotX();
        double y = yTouch - getPivotY();

        double radian = Math.atan2(y, x);
        return radian;
    }

제가 공식을 구하는 코드이구요. 여기서 문제점은 getPositionAngle의 값이 -2.1, -2.2,-2.3 과 같이 순차적으로 잘나오다가 어느순간 2.1 로 부호가 변경되어버리니 View가 제가 원하는 방향과 거꾸로 돌게되는 문제가 있습니다.

atan2의 값을 어떻게 보정해줘야 원하는 방향으로 돌릴 수 있을까요?

  • (아크)탄젠트 특성상 부호가 반전되죠...0보다 작으면 360을 더해보는 건 어떤가요? 정영훈 2018.1.15 13:12
  • @정영훈 그럴경우 반대로 돌릴때 같은현상이 발생합니다. 방향만 달라져요. 최봉재 2018.1.15 14:27

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)