Calculate an equally bright grey to a linear RGB colour I'm trying to get a grey linear-RGB-triple that is equally bright as another (colorful) RGB-triple.
I have to admit, that there is great confusion for me with all the color stuff, even though I read a lot of wikipedia articles, but I don't really get the big picture. I'm kind of lost and need help.
Wikipedia seems to mention a formula to receive the perceived brightness of a linear RGB color.
So I can measure the brightness of my color and do something like this I suppose:
public Vector3d get_equally_bright_grey(Vector3d color) {
    for (double c = 0.0; c &lt;= 1.0; c += 0.001) {
        Vector3d grey = new Vector3d(c, c, c);
        if (brightness(color) == brightness(grey)){
            return grey;
        }
    }
}

But there has to be something other :)

Some context:
My input colors were spectral distributions that I converted to XYZ values (after Bruce Lindbloom).
Then I have converted those XYZ values to linear RGB (again with Bruce). And here comes my question.
I know that the Y component of my XYZ triples is also something like the luminance, but I don't know how I generate a grey color XYZ color from this either..
The easiest way to get the perceived brightness of a color is to calculate the Luma. Finding the grey color with the same luma is easy - just set all of the RGB components to the desired luma value. That works because the coefficients for calculating the luma sum up to 1.

public Vector3d get_equally_bright_grey(Vector3d color) {
    double luma = color.x * 0.299 + color.y * 0.587 + color.z * 0.114;
    return new Vector3d(luma, luma, luma);
}