我将声音视为一个名为scaledVol的浮点数。我希望改变由scaledVol绘制的字母的间距。
这是代码段:
for (int i = 0; i < camWidth; i+=7){
for (int j = 0; j < camHeight; j+=9){
// get the pixel and its lightness (lightness is the average of its RGB values)
float lightness = pixelsRef.getColor(i,j).getLightness();
// calculate the index of the character from our asciiCharacters array
int character = powf( ofMap(lightness, 0, 255, 0, 1), 2.5) * asciiCharacters.size();
// draw the character at the correct location
ofSetColor(0, 255, 0);
font.drawString(ofToString(asciiCharacters[character]), f, f);
}
}
其中i设置字符间距和j之间的宽度设置字符间距之间的高度。
我希望通过名为scaledVol的浮点数递增而不是递增7或9。
答案 0 :(得分:2)
我希望通过名为scaledVol的浮点数递增而不是递增7或9。
然后代码:
for (int i = 0; i < camWidth; i+=(int)scaledVol){
您可能想要发言,并确保转换完成一次,增量;也许是代码
int incr = (int) floor(scaledVol);
assert (incr > 0);
for (int i = 0; i < camWidth; i+=incr) {
详细了解floor(3),ceil(3),round(3)和IEEE floating point以及rounding errors
请使用您的调试器(例如gdb
)了解更多信息。
您可以使用更多C ++友好casts,例如
int incr = int(floor(scaledVol));
int incr = static_cast<int>(floor(scaledVol));
或者甚至是reinterpret_cast
int incr = reinterpret_cast<int>(floor(scaledVol));
可能无法正常工作,特别是如果两种数字类型具有相同的大小。
答案 1 :(得分:1)
需要像
这样的东西for (float i = 0.0f; i < camWidth; i+=scaleVol){
假设camWidth
是浮点数。如果不把它扔到浮子上。
将scaledVol
转换为int
答案 2 :(得分:1)
您可以使用float
作为两个循环变量的类型,然后将它们转换为int
:
for (float x = 0; (int)x < camWidth; x+=scaledVol) {
int i = (int)x;
for (float y = 0; (int)y < camHeight; y+=scaledVol) {
int j = (int)y;
// the rest of the code using i and j
}
}
请注意,scaledVol
最好大于1,否则您的i
和j
的连续值相等。你在`//其余的代码'中的处理方式可能不那么喜欢。