通过HSV颜色计算圆点

时间:2018-08-03 13:21:22

标签: java android

我有一个色环,用户可以从中选择一种颜色。颜色是用这种方法计算的

public int getColorForPoint(int x, int y, float[] hsv) {
        x -= fullCircleRadius;
        y -= fullCircleRadius;
        double centerDist = Math.sqrt(x * x + y * y);

        hsv[0] = (float) (Math.atan2(y, x) / Math.PI * 180f) + 180;
        hsv[1] = Math.max(0f, Math.min(1f, (float) (centerDist / innerCircleRadius)));

        return Color.HSVToColor(hsv);
    }

现在,我需要反向方法来通过给定的颜色(hsv数组)计算x和y坐标。 更具体地说:用户可以保存颜色,色环中的指示器应“跳转”到该圆上保存的颜色。 但是我对这种数学很迷茫。

1 个答案:

答案 0 :(得分:1)

看一下centerDist的计算方式-我可以告诉你圆心在原点(0,0)。

基本上,HSV是一个极坐标,您所需要做的只是将一个极坐标转换为笛卡尔坐标。如下。

public double[] getHSVtoCartesian(double[] hsv) {

    double [] xy;

     double theta = hsv[0];
     double r = hsv[1];

    xy[0] = r * Math.cos(theta);
    xy[1] = r * Math.sin(theta);

    return xy;
}