我有一个色环,用户可以从中选择颜色。颜色就是用这个方法计算的
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/