Beispiel #1
0
void
GfRGB::GetHSV(float *h, float *s, float *v) const
{
    const GfRGB &rgb = *this;

    float max = GfMax(rgb[0], GfMax(rgb[1], rgb[2]));
    float min = GfMin(rgb[0], GfMin(rgb[1], rgb[2]));
    float diff = max - min;

    // The value is the maximum component.
    *v = max;

    // Saturation
    *s = (max != 0.0 ? diff / max : 0.0);

    // Hue
    if (*s != 0.0) {
        if (rgb[0] == max)
            *h = (rgb[1] - rgb[2]) / diff;
        else if (rgb[1] == max)
            *h = 2.0 + (rgb[2] - rgb[0]) / diff;
        else
            *h = 4.0 + (rgb[0] - rgb[1]) / diff;
        if (*h < 0.0)
            *h += 6.0;
        *h /= 6.0;
    }
    else
        *h = 0.0;
}
Beispiel #2
0
GfRange3f
GfRange3f::GetOctant(size_t i) const
{
    if (i > 7) {
        TF_CODING_ERROR("Invalid octant %zu > 7.", i);
        return GfRange3f();
    }

    GfVec3f a = GetCorner(i);
    GfVec3f b = .5 * (_min + _max);

    return GfRange3f(
        GfVec3f(GfMin(a[0], b[0]), GfMin(a[1], b[1]), GfMin(a[2], b[2])),
        GfVec3f(GfMax(a[0], b[0]), GfMax(a[1], b[1]), GfMax(a[2], b[2])));
}
Beispiel #3
0
GfRange2d
GfRange2d::GetQuadrant(size_t i) const
{
    if (i > 3) {
        TF_CODING_ERROR("Invalid quadrant %zu > 3.", i);
        return GfRange2d();
    }

    GfVec2d a = GetCorner(i);
    GfVec2d b = .5 * (_min + _max);

    return GfRange2d(
        GfVec2d(GfMin(a[0], b[0]), GfMin(a[1], b[1])),
        GfVec2d(GfMax(a[0], b[0]), GfMax(a[1], b[1])));
}