getRandomColor, но избегают темных цветов: Помогите моему алгоритму

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

- (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];
}

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

8
задан Dan Rosenstark 29 July 2010 в 03:25
поделиться

3 ответа

+ (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

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

15
ответ дан 5 December 2019 в 09:23
поделиться

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

2
ответ дан 5 December 2019 в 09:23
поделиться

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

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)
1
ответ дан 5 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: