java - 通过HSV颜色计算圆内的点

标签 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 坐标。 更具体地说:用户可以保存颜色,并且色环中的指示器应“跳转”到圆圈上保存的颜色。 但我对这些数学完全迷失了。

最佳答案

看看你计算 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;
}

关于java - 通过HSV颜色计算圆内的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673637/

相关文章:

java - 如何在IN子句内的SQL查询中设置绑定(bind)变量的值

Java boolean 值定义后返回 null

android - 检测调用保持

java - 无法在 android studio 中使用 viewpager 查看选项卡布局中的选项卡名称

android - react native : Platform specific code in package. json

Java:证明DCL不起作用

java - 对同一个 SQS FIFO 队列执行 receiveMessageRequest

java - 在仍在添加项目时将 onItemClickListener 添加到每个 ListView 项目

android - 如何使用android.webkit.PluginStub

java - 黑莓替换字符串的方法?