Различные цвета в обработке
Я работал над переносом части моего кода обработки на обычную Java в NetBeans. Пока все хорошо, почти все прекрасно работает, за исключением случаев, когда я использую цвета не в оттенках серого.
У меня есть сценарий, который рисует спиральную модель и должен варьировать цвета спирали на основе проверки модуля. Однако сценарий кажется зависшим, и я не могу объяснить, почему.
Если у кого-то есть опыт работы с Processing и Java, и вы можете сказать мне, где моя ошибка, я бы очень хотел знать.
Ради рецензирования, вот моя маленькая программа:
package spirals;
import processing.core.*;
public class Main extends PApplet
{
float x, y;
int i = 1, dia = 1;
float angle = 0.0f, orbit = 0f;
float speed = 0.05f;
//color palette
int gray = 0x0444444;
int blue = 0x07cb5f7;
int pink = 0x0f77cb5;
int green = 0x0b5f77c;
public Main(){}
public static void main( String[] args )
{
PApplet.main( new String[] { "spirals.Main" } );
}
public void setup()
{
background( gray );
size( 400, 400 );
noStroke();
smooth();
}
public void draw()
{
if( i % 11 == 0 )
fill( green );
else if( i % 13 == 0 )
fill( blue );
else if( i % 17 == 0 )
fill( pink );
else
fill( gray );
orbit += 0.1f; //ever so slightly increase the orbit
angle += speed % ( width * height );
float sinval = sin( angle );
float cosval = cos( angle );
//calculate the (x, y) to produce an orbit
x = ( width / 2 ) + ( cosval * orbit );
y = ( height / 2 ) + ( sinval * orbit );
dia %= 11; //keep the diameter within bounds.
ellipse( x, y, dia, dia );
dia++;
i++;
}
}
4 ответа
Рассматривали ли вы добавление отладочных операторов (System.out.println) и просмотр консоли Java?
Там может быть огромное количество продукции и окончательное замедление, но вы можете по крайней мере увидеть, что происходит, когда кажется, что ничего не происходит.
Я считаю, что логическая ошибка - это заполнение оператора if; каждую итерацию вы выбираете цвет этой итерации и заполняете этим цветом. Только итерации с i == 11, 13 или 17 заполняются цветом. И на следующей итерации этот цвет перезаписывается серым. Я бы подумал, что он может мерцать, возможно, быстро увидеть.
Разве ты не хотел что-то вроде
public class Main extends PApplet
{
...
int currentColor = gray;
public Main(){}
...
public void draw()
{
if( i % 11 == 0 )
currentColor = green;
else if( i % 13 == 0 )
currentColor = blue;
else if( i % 17 == 0 )
currentColor = pink;
else {
// Use current color
}
fill(currentColor);
...
}
Таким образом, вы начинаете с серого, переходите к зеленому, синему, розовому, зеленому, синему, розовому и т. Д. Если вы также хотите увидеть серый в какой-то момент, вам нужно добавить что-то вроде
else if ( i % 19 ) {
currentColor = gray;
}
Надеюсь это поможет.
Спасибо за всю помощь, но я думаю, что моя конечная цель немного неправильно истолкована.
Вот изображение, которое я сгенерировал, используя PDE для обработки:
http://www.deviantart.com/download/97026288/spiral_render_5_by_ishkur88.png
Мой желаемый результат имеет тенденцию выглядеть примерно так, отличаясь окраской и общей формой спирали.
Как упоминалось в предыдущем постере: вы используете не серый цвет только на каждой 11-й, 13-й и 17-й итерации.
Спасибо за указание на это, но я уже знаю! Я действительно разработал это таким образом!
Причина в том, что если бы у меня не было серого значения по умолчанию, результат был бы безумно хаотичным и очень неприятным для глаз (по крайней мере, для моего глаза).
Если бы я мог просто пропустить рендеринг этого круга целиком, мне бы это больше понравилось.
Не уверен, если у вас все еще есть проблема. Вы упоминаете повешение. Это выстрел в темноте, но я помню, Фрай, повторяя, что вызов size() должен быть первой инструкцией в setup(). Так что, возможно, поможет перемещение вниз по фону (). В любом случае не может быть больно.
Чтобы увидеть, что здесь происходит, добавьте
stroke(255);
в начале розыгрыша. Вы увидите, что все желаемые круги нарисованы, но без цвета. Как упоминалось в предыдущем постере: вы используете не серый цвет только на каждой 11-й, 13-й и 17-й итерации.
Я думаю, что ваши цветовые значения являются главной проблемой здесь. Как со справочной страницы
С технической точки зрения, цвета - это 32 бита информации, упорядоченные как AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB, где А содержат альфа-значение, R - красный / оттенок, G - зеленый / насыщенность, а В - синий / яркость.
Если вы посмотрите на свои значения, вы увидите очень низкое альфа-значение, которое, возможно, невозможно отличить от фона.