Как опустить одно число, когда другое поднимается?
Я беру значение от мыши (mouseX
) позиция в обработке, так как это значение становится выше, я хочу, чтобы количество ящиков, которые отображаются, уменьшаться с шагом 5 (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.
1 ответ
Лучший совет, который я могу вам дать, - достать лист бумаги и карандаш и нарисовать таблицу положений мыши и количество коробок, которые вы хотите. Это может выглядеть так:
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;
Это общий подход, но вы можете применить его к своей цели, чтобы найти конкретное решение.
Удачи!