I derive a color algorithmically. I actually prefer this method over trying to define compliment colors by hand.
Code:
//========== complimentColor() =================================================
//
// Purpose: Changes the given RGBA color into a "complimentary" color, which
// stands out in the original color, but maintains the same hue.
//
//==============================================================================
void complimentColor(const GLfloat *originalColor, GLfloat *complimentColor)
{
float brightness = 0.0;
// Isolate the color's grayscale intensity http://en.wikipedia.org/wiki/Grayscale
brightness = originalColor[0] * 0.30
+ originalColor[1] * 0.59
+ originalColor[2] * 0.11;
//compliment dark colors with light ones and light colors with dark ones.
if(brightness > 0.5)
{
// Darken
complimentColor[0] = MAX(originalColor[0] - 0.40, 0.0);
complimentColor[1] = MAX(originalColor[1] - 0.40, 0.0);
complimentColor[2] = MAX(originalColor[2] - 0.40, 0.0);
}
else
{
// Lighten
complimentColor[0] = MIN(originalColor[0] + 0.40, 1.0);
complimentColor[1] = MIN(originalColor[1] + 0.40, 1.0);
complimentColor[2] = MIN(originalColor[2] + 0.40, 1.0);
}
complimentColor[3] = originalColor[3];
}//end complimentColor