よく使う (が、ライブラリ化するほどでない) コード断片集。

C 言語

最大・最小値

二つの値を比較して、小さい方または大きい方を返すマクロ。

#define min(a, b) ((a)<(b) ? (a) : (b))
#define max(a, b) ((a)<(b) ? (b) : (a))

現在時刻取得

現在のシステム時刻 (いわゆる UNIX 時間、単位は秒) をマイクロ秒の精度で取得します。 プログラムの実行時間計測などでよく使う。

#include <sys/time.h>

/**
 * Returns the current system time in microtime precision.
 */
double microtime(){
        struct timeval tv;
        gettimeofday(&tv, NULL);
        return tv.tv_sec + 1e-6 * tv.tv_usec;
}

HSV → RGB 変換

色の値は 0~255 ではなく 0~1 の範囲の実数で指定します。

/** Stores RGB data. */
typedef struct _rgb_t {
        double r;
        double g;
        double b;
} rgb_t;

/**
 * Convert HSV->RGB.
 * @param h Hue in range [0,1).
 * @param s Saturation in range [0,1).
 * @param v Value in range [0,1).
 */
rgb_t hsv2rgb(const double h, const double s, const double v){
        int hi = ((int)floor(6. * h)) % 6;
        double f = 6. * h - hi;
        double p = v * (1. - s);
        double q = v * (1. - f*s);
        double t = v * (1. - (1. - f) * s);
        if(hi == 0){
                rgb_t rgb = {v, t, p};
                return rgb;
        }else if(hi == 1){
                rgb_t rgb = {q, v, p};
                return rgb;
        }else if(hi == 2){
                rgb_t rgb = {p, v, p};
                return rgb;
        }else if(hi == 3){
                rgb_t rgb = {p, q, v};
                return rgb;
        }else if(hi == 4){
                rgb_t rgb = {t, p, v};
                return rgb;
        }else{
                rgb_t rgb = {v, p, q};
                return rgb;
        }
}

その他/コードスニペット (last edited 2013-11-06 09:39:08 by epii)