Итак, у меня есть проект для класса, над которым я работаю, в котором вам нужно создать графический интерфейс, заполненный кругами, за исключением того, что средний 50% экрана не может быть заполнен кругами. Кроме того, значение красного цвета каждого круга масштабируется линейно сверху донизу экрана, 0 вверху, 255 внизу. Вот то, что он должен выглядеть следующим образом:Как линейно масштабировать окраску пикселей?
Вот что у меня есть. Я попытался сделать 255/500 (500 - это высота), чтобы получить коэффициент масштабирования, который затем использовал бы, чтобы умножить все мои координаты y, чтобы получить указанное красное значение, и оно сработало. Ответ на 255/500 равен 0,51, и когда я использовал 0,51 вместо y * (255/getHeight()); это сработало. Однако мне нужно, чтобы он работал с любыми размерами кадра, поэтому 0.51 не работает. По какой-то причине y * (255/getHeight()) не работает, он, кажется, возвращает 0, так как круги представляют собой различные оттенки синего и зеленого. Что я могу сделать, чтобы исправить это?
код у меня есть:
public class NewJComponent1 extends JComponent {
public void paintComponent(Graphics g) {
int count = 0;
int diameter = 0;
Random rand = new Random();
while (count < 5000) {
int x = rand.nextInt(getWidth() + 1);
int y = rand.nextInt(getHeight() + 1);
int greenValue = rand.nextInt(256);
int blueValue = rand.nextInt(256);
diameter = rand.nextInt(21) + 10;
int redValue = y * (255/getHeight());
Color random = new Color (redValue, greenValue, blueValue);
if ((x < (getWidth()/4) && y <= (getHeight() - diameter))
|| ((x > (getWidth() * .75) && (x < getWidth() - diameter)) && y <= (getHeight() - diameter))
|| (x <= (getWidth() - diameter) && y < (getHeight()/4))
|| (x <= (getWidth() - diameter) && ((y > (getHeight() * .75)) && (y <= getHeight() - diameter)))){
g.setColor(random);
g.fillOval(x, y, diameter, diameter);
count++;
}
}
System.out.println(getHeight());
System.out.println(getWidth());
}
}
Я пробовал различные итерации redValue
кода, поменяв порядок, сделав двойной и типажей для Int, а также различные другие вещи, но я не мог заставить его работать. Я уверен, что это небольшая ошибка, которая все испортит, но, в любом случае, спасибо за помощь независимо. Я использую Android Studio, не уверен, что это действительно повлияет на что угодно.
«int redValue = (int) (y * (255.0/getHeight()));« Ключевым моментом является то, что один из операндов деления должен быть типа с плавающей точкой, поэтому даже «double redValue = 255/getHeight(); 'даст вам« redValue' из «0.0» – clcto
. Еще одно замечание: обратите внимание, что ваш экран можно разделить на 4x4 прямоугольники, и вам не разрешено рисовать только 4 из них. Вы могли бы создать рутину для того, в котором кусочки центра никогда не считаются *, чтобы привлечь. (Гораздо меньшая оптимизация - вы можете сначала проверить центр, и только затем выбрать свои цвета.) – usr2564301