美文网首页Android开发
Android获取两条线之间的夹角度数

Android获取两条线之间的夹角度数

作者: oden | 来源:发表于2016-09-11 15:57 被阅读0次

    核心代码

    centerX、centerY为公共点,xInView、yInView为触摸点的坐标

     /**
         *获取两条线的夹角
         * @param centerX
         * @param centerY
         * @param xInView
         * @param yInView
         * @return
         */
        public static int getRotationBetweenLines(float centerX, float centerY, float xInView, float yInView) {
            double rotation = 0;
    
            double k1 = (double) (centerY - centerY) / (centerX * 2 - centerX);
            double k2 = (double) (yInView - centerY) / (xInView - centerX);
            double tmpDegree = Math.atan((Math.abs(k1 - k2)) / (1 + k1 * k2)) / Math.PI * 180;
    
            if (xInView > centerX && yInView < centerY) {  //第一象限
                rotation = 90 - tmpDegree;
            } else if (xInView > centerX && yInView > centerY) //第二象限
            {
                rotation = 90 + tmpDegree;
            } else if (xInView < centerX && yInView > centerY) { //第三象限
                rotation = 270 - tmpDegree;
            } else if (xInView < centerX && yInView < centerY) { //第四象限
                rotation = 270 + tmpDegree;
            } else if (xInView == centerX && yInView < centerY) {
                rotation = 0;
            } else if (xInView == centerX && yInView > centerY) {
                rotation = 180;
            }
    
            return (int) rotation;
        }
    

    具体使用

     @Override
        public boolean onTouch(View v, MotionEvent event) {
            float centerX = img_colors.getWidth() / 2;
            float centerY = img_colors.getHeight() / 2;
            setPointerRotation(Tools.getRotationBetweenLines(centerX, centerY, event.getX(), event.getY()));
            return true;
        }
    

    相关文章

      网友评论

        本文标题:Android获取两条线之间的夹角度数

        本文链接:https://www.haomeiwen.com/subject/yvmuettx.html