我必须为大学做一个项目。我们必须模拟疾病的发展。模拟代码已经为我工作了,但我们不得不从图像中插入人口,该图像显示区域中与颜色梯度相关的区域(如红色表示每平方公里xy人,黄色表示每平方公里yz人。 ..)。黑色像素和白色像素表示这些区域没有人口。这样的函数/算法怎么样?例如,图像看起来像image,但我没有传说我只有该区域的总人口?
我可以使用哪种算法来解决我的问题?我不知道如何在这样的问题中处理颜色我首先尝试重新划分红色,绿色和蓝色部分,但那不是真的有效。
答案 0 :(得分:0)
如果你只想要一个从黄色到红色的线性渐变,那就相对简单了。
RGB中的纯红色为(255, 0, 0)
。有道理,对吗?为了变红,你最大化红色成分,没有绿色或蓝色。
纯黄色是(255, 255, 0)
,它是红色和绿色的完美均匀混合,没有蓝色。
因此,正如您所见,R=255
和B=0
都是如此。通过改变绿色的数量,你可以在中间获得一些东西。因此,您的比例具有255个不同的值 - 它只是从人口密度映射到0到255之间的值。
private static final int MAX_RGB_VALUE = 255;
int getGreen(final int maxDensity, final int minDensity, final int density)
{
// we could/should check that minDensity < density < maxDensity else
// we'll get divide by zero errors
final int delta = maxDensity - minDensity;
final float relativeDensity = density / (float) delta;
return Math.round(relativeDensity * MAX_RGB_VALUE);
}
然后你的最终颜色看起来像是:
final int green = getGreen(maxDensity, minDensity, density);
Color colour = new Color(MAX_RGB_VALUE, green, MAX_RGB_VALUE);