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

Posted brave-sailor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android获取两条线之间的夹角度数相关的知识,希望对你有一定的参考价值。

核心代码

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获取两条线之间的夹角度数的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS应用(二十五)两条直线角度的测算方法

ArcGIS应用(二十五)两条直线角度的测算方法

ArcGIS应用(二十五)两条直线角度的测算方法

在CAD中如何标注钝角度数?

为异常绘制两条线之间的空间

“如何在 Line-plot 中显示两条线的数据点之间的差异值?”