2

我从处理中的鼠标 ( ) 位置获取一个值,随着该值变高,我希望以 5 ( )mouseX为步长呈现的框数量减少。rotStep

我做了很多阅读,发现我应该使用的方法称为“负相关”,或者至少我认为是。我从来没有高分数学,所以我在这里几乎一无所知。也许有一个已经存在的功能可以做到这一点。经过大量的谷歌搜索后,我来到这里询问。

尝试将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);
  }
}

当变量增加rotStep时,变量应该减少,mouseX反之亦然。变量rotStep也应该以 5 为步长增加或减少。

4

1 回答 1

3

我能给你的最好建议是拿出一张纸和一支铅笔,画一张鼠标位置和你想要的盒子数量的表格。它可能看起来像这样:

mouseX  boxes
---------------
0      | 50
100    | 40
200    | 30
300    | 20
400    | 10
500    | 0

这只是一个示例,因此您的数字可能会有所不同。但是这个想法是对mouseX要绘制的框数进行一般映射。

一旦你有了它,那么你可以尝试找到一个让你从mouseX你的盒子计数中得到的方程。这可能是一个单一的等式,或者它可能涉及if将值组合在一起的语句。

mouseX您可以通过从最大可能值中减去或用作除数来获得“负相关” 。

float reverseMouseX = width - mouseX;
float inverseMouseX = 1 / mouseX;

对于这两种方法,随着mouseX增加,变量的值将减小。然后,您可以在方程式或if语句逻辑中使用这些值。

要访问上面显示的示例表,我可能会执行以下操作:

int boxes = (width - mouseX) / 10;

这是一种通用方法,但您可以将其应用于您的目标以提出特定的解决方案。

祝你好运!

于 2019-08-23T18:17:41.193 回答