我有一个色环,用户可以从中选择一种颜色。颜色是用这种方法计算的
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坐标。 更具体地说:用户可以保存颜色,色环中的指示器应“跳转”到该圆上保存的颜色。 但是我对这种数学很迷茫。
答案 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;
}