如何在一个数字上升时降低一个数字?
How to lower one number when the other rises?
我在 Processing 中从鼠标 (mouseX
) 位置获取一个值,随着该值变大,我希望渲染的框数量以 5 (rotStep
).
我读了很多书,发现我应该使用的方法叫做 'Negative correlation',或者至少我认为是。我从来没有上过高等数学,所以我在这里几乎一无所知。也许已经存在一个功能可以做到这一点。经过大量谷歌搜索后,我来到这里询问。
尝试将 mouseX
输入除以自身和其他一些随机总和,但这似乎比我预期的要复杂。
我正在尝试生成艺术生成,并且可以使用提示进一步尝试渲染更多框(四边形),因为 mouseX
值降低。
void setup() {
pixelDensity(displayDensity());
size(500, 500);
background(0);
noFill();
stroke(255);
}
void draw() {
translate(width/2, height/2);
ellipse(0, 0, 50, 50);
background(0);
mouseX= constrain(mouseX, 1, width);
mouseY= constrain(mouseY, 1, height);
float rotationMax = 90;
float rotStep = (mouseX/15)+5;
//I need to add a negative correlation so the number
//of squares lowers as the mouseX position gets higher
//and all this in steps of 5
float quadSize = mouseX;
float qs = quadSize;
for (float i=0; i<rotationMax; i+=rotStep) {
float deg = rotStep;
float rad = radians(deg);
stroke(255);
strokeWeight(1);
rotate(rad);
quad(-qs, -qs, qs, -qs, qs, qs, -qs, qs);
}
}
当 mouseX
变量增加时,rotStep
变量应该减少,反之亦然。变量 rotStep
也应该以 5 的步长增加或减少。
我能给你的最好建议是拿出一张纸和一支铅笔,画出 table 鼠标位置和你想要的框数。它可能看起来像这样:
mouseX boxes
---------------
0 | 50
100 | 40
200 | 30
300 | 20
400 | 10
500 | 0
这只是一个示例,因此您的数字可能会有所不同。但我们的想法是将 mouseX
映射到您要绘制的框数。
一旦你有了它,你就可以尝试找到一个方程式,让你从 mouseX
到你的盒子数。这可能是一个单一的等式,或者它可能涉及 if
将值存储在一起的语句。
您可以通过从最大可能值中减去或使用 mouseX
作为除数来得到 "negative correlation"。
float reverseMouseX = width - mouseX;
float inverseMouseX = 1 / mouseX;
对于这两种方法,随着 mouseX
的增加,变量的值将减少。然后,您可以在等式或 if
语句逻辑中使用这些值。
为了得到上面显示的示例 table,我可能会这样做:
int boxes = (width - mouseX) / 10;
这是一个通用的方法,但您可以将其应用到您的目标中以提出具体的解决方案。
祝你好运!
我在 Processing 中从鼠标 (mouseX
) 位置获取一个值,随着该值变大,我希望渲染的框数量以 5 (rotStep
).
我读了很多书,发现我应该使用的方法叫做 'Negative correlation',或者至少我认为是。我从来没有上过高等数学,所以我在这里几乎一无所知。也许已经存在一个功能可以做到这一点。经过大量谷歌搜索后,我来到这里询问。
尝试将 mouseX
输入除以自身和其他一些随机总和,但这似乎比我预期的要复杂。
我正在尝试生成艺术生成,并且可以使用提示进一步尝试渲染更多框(四边形),因为 mouseX
值降低。
void setup() {
pixelDensity(displayDensity());
size(500, 500);
background(0);
noFill();
stroke(255);
}
void draw() {
translate(width/2, height/2);
ellipse(0, 0, 50, 50);
background(0);
mouseX= constrain(mouseX, 1, width);
mouseY= constrain(mouseY, 1, height);
float rotationMax = 90;
float rotStep = (mouseX/15)+5;
//I need to add a negative correlation so the number
//of squares lowers as the mouseX position gets higher
//and all this in steps of 5
float quadSize = mouseX;
float qs = quadSize;
for (float i=0; i<rotationMax; i+=rotStep) {
float deg = rotStep;
float rad = radians(deg);
stroke(255);
strokeWeight(1);
rotate(rad);
quad(-qs, -qs, qs, -qs, qs, qs, -qs, qs);
}
}
当 mouseX
变量增加时,rotStep
变量应该减少,反之亦然。变量 rotStep
也应该以 5 的步长增加或减少。
我能给你的最好建议是拿出一张纸和一支铅笔,画出 table 鼠标位置和你想要的框数。它可能看起来像这样:
mouseX boxes
---------------
0 | 50
100 | 40
200 | 30
300 | 20
400 | 10
500 | 0
这只是一个示例,因此您的数字可能会有所不同。但我们的想法是将 mouseX
映射到您要绘制的框数。
一旦你有了它,你就可以尝试找到一个方程式,让你从 mouseX
到你的盒子数。这可能是一个单一的等式,或者它可能涉及 if
将值存储在一起的语句。
您可以通过从最大可能值中减去或使用 mouseX
作为除数来得到 "negative correlation"。
float reverseMouseX = width - mouseX;
float inverseMouseX = 1 / mouseX;
对于这两种方法,随着 mouseX
的增加,变量的值将减少。然后,您可以在等式或 if
语句逻辑中使用这些值。
为了得到上面显示的示例 table,我可能会这样做:
int boxes = (width - mouseX) / 10;
这是一个通用的方法,但您可以将其应用到您的目标中以提出具体的解决方案。
祝你好运!