색좌표상의 x, y 값을 이용한 LED 색온도(CCT) 계산 알고리즘

반응형

table.h
0.02MB

계산상 필요한 table 은 위의 파일을 다운로드 받으세요

색좌표상의 x, y 값을 이용하여 발광빛의 색온도(Correlated Color Temperature)를 계산하는 코드 입니다.

 

double CCT(double xs, double ys)
{
    int j;
    double us,vs;
    double uj,vj,tj,di,dj,mi,mj;
    double cct ;  

    /* convert (x,y) to CIE 1960 (u,v) */
    try
    {
        us = (2*xs) / (-xs + 6*ys + 1.5);
        vs = (3*ys) / (-xs + 6*ys + 1.5);
    }
    catch(...)
    {
        us = 0 ;
        vs = 0 ;
    }

    /* search for closest isotemp lines */
    for(j=0 ; j<niso ; j++)
    {
        uj = isotempdata[j].ut ;
        vj = isotempdata[j].vt ;
         tj = isotempdata[j].tt ;
         mj = isotempdata[j].mirek ;

          try
          {
             dj = ((vs - vj) - tj * (us - uj)) / sqrt(1 + tj*tj) ; /* dj = distance from (us,vs) to this isotemp line */
          }
          catch(...)
          {
                dj = 0 ;
          }

    /* we stop when (di/dj) < 0.0, i.e. when distance changes sign, because this means we have found isotemp lines
       that "straddle" our point. */

          try
          {
                if ((j!=0) && (di/dj < 0.0))
                {
                    cct = 1000000.0 / (mi + (di / (di - dj)) * (mj - mi));
                    break;
                 }
            }
            catch(...)
            {
                cct = 0 ;
                break ;
            }

            di = dj;
            mi = mj;
        }

        if (j == niso) cct = -1 ;

        return cct ;
}
반응형

댓글()