편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.01.15

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


    안녕하세요. 안드로이드로 간단한 게임을 만들던중 수학 식(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의 값을 어떻게 보정해줘야 원하는 방향으로 돌릴 수 있을까요?

  • 프로필 최봉재님의 편집
    날짜2018.01.15

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


    안녕하세요. 안드로이드로 간단한 게임을 만들던중 수학 식(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의 값을 어떻게 보정해줘야 원하는 방향으로 돌릴 수 있을까요?