Вы могли насчитать значения RGB произвольных цветов с теми из постоянного цвета:
(пример в Java)
public Color generateRandomColor(Color mix) {
Random random = new Random();
int red = random.nextInt(256);
int green = random.nextInt(256);
int blue = random.nextInt(256);
// mix the color
if (mix != null) {
red = (red + mix.getRed()) / 2;
green = (green + mix.getGreen()) / 2;
blue = (blue + mix.getBlue()) / 2;
}
Color color = new Color(red, green, blue);
return color;
}
Смешивание произвольных цветов с белым (255, 255, 255) создает нейтральные пастели путем увеличения легкости при хранении оттенка исходного цвета. Эти случайным образом сгенерированные пастели обычно подходят вместе, особенно в больших количествах.
Вот сгенерированное использование некоторых пастельных цветов вышеупомянутого метода:
Вы могли также смешать произвольный цвет с постоянной пастелью, которая приводит к крашеному набору нейтральных цветов. Например, использование голубого создает цвета как они:
Движение далее, Вы могли добавить эвристику к своему генератору, которая принимает во внимание дополнительные цвета или уровни штриховки, но все это зависит от впечатления, которого Вы хотите достигнуть со своими произвольными цветами.
Некоторые дополнительные ресурсы:
$ cat > hwa.S
write = 0x04
exit = 0xfc
.text
_start:
movl $1, %ebx
lea str, %ecx
movl $len, %edx
movl $write, %eax
int $0x80
xorl %ebx, %ebx
movl $exit, %eax
int $0x80
.data
str: .ascii "Hello, world!\n"
len = . -str
.globl _start
$ as -o hwa.o hwa.S
$ ld hwa.o
$ ./a.out
Hello, world!
Взгляните на пример 4 (не выиграет приз за переносимость):
#include <syscall.h>
void syscall1(int num, int arg1)
{
asm("int\t$0x80\n\t":
/* output */ :
/* input */ "a"(num), "b"(arg1)
/* clobbered */ );
}
void syscall3(int num, int arg1, int arg2, int arg3)
{
asm("int\t$0x80\n\t" :
/* output */ :
/* input */ "a"(num), "b"(arg1), "c"(arg2), "d"(arg3)
/* clobbered */ );
}
char str[] = "Hello, world!\n";
int _start()
{
syscall3(SYS_write, 0, (int) str, sizeof(str)-1);
syscall1(SYS_exit, 0);
}
Изменить: как указано Zan Lynx ниже, первый аргумент sys_write - это дескриптор файла . Таким образом, этот код делает необычную вещь, записывая «Hello, world! \ N»
в stdin (fd 0) вместо stdout (fd 1).
Как насчет того, чтобы написать его на чистой сборке, как в примере, представленном по следующей ссылке?
Вам нужно будет связаться с ОС напрямую. Вы можете записать
в файловый дескриптор 1 (stdout), выполнив:
#include <unistd.h>
int main()
{
write(1, "Hello World\n", 12);
}
А как насчет сценария оболочки? Я не заметил в вопросе требований к языку программирования.
echo "Hello World!"