【发布时间】:2019-01-21 13:34:11
【问题描述】:
我有 n 个球对象(每个都以随机速度 (0,4) 开始)在屏幕上(在 2D 中)相互碰撞。我想要做的是根据每个球的速度为每个球分配一个颜色,这样速度最高的球(比如 v)具有蓝色,并且随着速度下降,颜色变得越来越红(中间速度取范围彩虹色)。我知道这是一个范围转换问题。
我该怎么做?
我试图获取球的速度大小并将其重新调整到一个范围 (0,255)。然后我使用填充方法给球上色。
public void display(){
float v = sqrt(pow(this.getDX(),2)+pow(this.getDY(),2));
int scale = (int)(v * 255)/8;
stroke(0);
fill(scale,0,scale);
ellipse(this.xpos, this.ypos, this.size ,this.size);
}
}
我无法获得想要的结果。主要是因为我不知道如何混合颜色,在这种情况下,为最慢的球获得红色,为最快的球获得蓝色。
【问题讨论】:
-
也许lerpColor() 可以提供帮助。无论如何,如果您提供有关您打算涵盖的
v值范围的更多信息,将会有所帮助。如果您提供minimal reproducible example 进行试验,那就更好了。 -
我预计
v不会超过 ~16-20。最小值为 0。以下是整个代码的 Pastebin 链接:1) Main:pastebin.com/S0JBeEkW 2) Classes:pastebin.com/xLg2fE0k -
可能类似于(未经测试的)
fill(lerpColor(color(255,0,0),color(0,0,255),map(v,0,20,0,1)))。 -
这很好用。我将测试一系列速度,看看它是否重现了预期的结果。
-
在这种情况下,Kevin Workman(Stack Overflow 的常驻处理专家)的 this answer 可能会有所帮助。
标签: colors processing fill