getRandomColor, но избегайте темных цветов: помогите моему алгоритму - PullRequest
8 голосов
/ 29 июля 2010

Я пытаюсь получить случайный цвет.Я сделал это, используя грубую силу, но этот метод кажется чрезмерно трудоемким (хотя распределение довольно равномерное):

- (UIColor *) getRandomColor {
 // GOAL: reject colors that are too dark
 float total = 3;
 float one = arc4random() % 256 / 256.0;
 total -= one;
 float two = arc4random() % 256 / 256.0;
 total -= two;
 float three = total; // UIColor will chop out-of-range nums

 NSMutableArray *threeFloats = [[[NSMutableArray alloc] initWithObjects:[NSNumber numberWithFloat:one], [NSNumber numberWithFloat:two], [NSNumber numberWithFloat:three], nil] autorelease];

 NSNumber *red, *green, *blue;
 red = [threeFloats objectAtIndex:arc4random() % [threeFloats count]];
 [threeFloats removeObject:red];
 green = [threeFloats objectAtIndex:arc4random() % [threeFloats count]];
 [threeFloats removeObject:green];
 blue = [threeFloats lastObject];

 return [UIColor colorWithRed:[red floatValue] green:[green floatValue] blue:[blue floatValue] alpha:1];
}

Как это можно улучшить?Я хочу равномерное распределение красного, зеленого и синего и ничего слишком темного (иначе я бы взял три случайных числа и покончил бы с этим).

Ответы [ 3 ]

15 голосов
/ 29 июля 2010
+ (UIColor *)colorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha;

CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black

Если с белым все в порядке, тогда делайте насыщенность как оттенок вместо яркости.

2 голосов
/ 29 июля 2010

Я бы, вероятно, сгенерировал (псевдо-) случайные числа для оттенка, насыщенности и яркости (или HSB) с ограничением яркости (или яркости) в любом диапазоне, который вы считаете разумным, затем преобразовал бы это в RGB .

1 голос
/ 29 июля 2010

Этот метод может помочь вам быстро генерировать яркие цвета случайным образом:

1 - Pick a random integer between 0-2
2 - If it is 0, set Red to Random(0.75-1.0), Green and Blue to Random(0.0-1.0)
2 - If it is 1, set Green to Random(0.75-1.0), Red and Blue to Random(0.0-1.0)
2 - If it is 2, set Blue to Random(0.75-1.0), Green and Red to Random(0.0-1.0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...