본문 바로가기

전체 글

(87)
LED 의 색좌표 x, y (CIE1931) 계산 알고리즘 계산상 필요한 table 은 위의 파일을 다운로드 받으세요 스펙트로메타를 통해 LED의 스펙트럼 데이타를 추출한 후 색좌표 상의 x,y (CIE1931)값을 계산하는 알고리즘 입니다. void CIE1931_Chromaticity(double* Wavelength, double* Spectrum, int Length, double& x, double& y) { double TristimulusX, TristimulusY, TristimulusZ; Tristimulus_Value(Wavelength, Spectrum, Length, TristimulusX, TristimulusY, TristimulusZ) ; try { x = TristimulusX / (TristimulusX + TristimulusY ..
색좌표상의 x, y 값을 이용한 LED Dominant 파장 계산 알고리즘 계산상 필요한 table 은 위의 파일을 다운로드 받으세요 색좌표상의 X,Y 값을 이용한 LED Dominant 파장 계산을 위한 알고리즘 입니다. double __fastcall Dominant_Wavelength(double Chroma_x, double Chroma_y) { DPOINT TempPos[4], Dominant ; double dtemp = 1000, value, degree, result ; int start = 0, stop = 0, temp = 0 ; double dominant_wavelength ; TempPos[0].x = TempPos[0].y = 0.33 ; TempPos[1].x = Chroma_x ; TempPos[1].y = Chroma_y ; try{ degree ..
색좌표상의 x, y 값을 이용한 LED 색온도(CCT) 계산 알고리즘 계산상 필요한 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
C# TCP/IP 를 이용한 Client 클래스 지난 글에서 멀티 Thread 를 이용한 서버를 구현했고 이번에는 Client 모듈을 클래스로 구현해 보았습니다. 서버와의 연결 및 해제에 대한 이벤트와 데이타 수신에 대한 이벤트를 발생하도록 구현되어 있습니다. Client 객체를 생성한 후에 데이타 수신 이벤트를 구현하여 수신된 데이타를 원하는 목적으로 사용할 수 있습니다. using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Client { public ..
C# Multi Thread를 이용한 다중 Client 접속 Server C#에서 TCP/IP 를 이용한 서버 동작을 위한 클래스를 구현했습니다. 이 서버 클래스는 다중 클라이언트 접속을 허용하도록 제작하였고 클라이언트가 접속을 하면 Thread를 생성하여 개별 클라이언트와 통신하도록 구현되어 있습니다. 이번 구현은 클라이언트와 ehco 기능으로 구현되어 있어서 클라이언트에서 서버에 접속 후 메시지를 보내면 클라이언트로 보낸 메시지가 반송되도록 코딩되어 있습니다. 클라이언트 메시지에 대한 동작 구현은 아래 코드에서 ehco 기능의 함수 부분을 수정하시면 됩니다. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.So..
boost 라이브러리의 링버퍼(circular buffer) 사용방법 boost 라이브러리에 있는 링버퍼(circular buffer)의 사용방법입니다. 이 부스트 라이브러리의 링버퍼는 큐(Queue) 를 사용하고 있는 듯 합니다. 버퍼가 가득찬 상태에서 추가로 데이타가 들어오면 가장먼저 들어온 데이타 순서로 제거 되면서 버퍼를 Shift 시키면서 데이타를 저장하는 방식입니다. #include // Create a circular buffer with a capacity for 3 integers. boost::circular_buffer cb(3); // Insert three elements into the buffer. cb.push_back(1); cb.push_back(2); cb.push_back(3); int a = cb[0]; // a == 1 int b =..
(C++) 폴더안에 특정 확장자를 가지는 파일들을 찾는 함수 구현 사용자가 선택한 폴더안에서 특정 파일 확장자를 가지고 있는 파일만 찾을 수 있는 함수 구현 입니다. 아래 코드에서 Search 한 파일들을 ComboBox에 등록시켰으나 필요에 따라 String 배열이나 List 를 사용하여 등록 하셔도 됩니다. void __fastcall FindFile(const UnicodeString &directory, const UnicodeString &ExtName, TComboBox *ComboBox) { WIN32_FIND_DATA filedata ; HANDLE filehandle ; ComboBox->Clear() ; filehandle = FindFirstFile((directory + ExtName).c_str(), &filedata) ; if(filehandl..
Data Smoothing #3 ( Exponential ) C++ 데이타 평활화 기법중에 하나인 Exponential Smoothing 함수 구현 입니다. fCoefficient 파라메터와 값은 0 < fCoefficient < 1 로 입력하셔야 하고 값이 작을수록 평활화의 강도가 세집니다. void Exponential_Smoothing(vector& Data, const float fCoefficient) { if(fCoefficient < 1) { float temp ; auto startIt = begin(Data) + 1 ; for(auto it = startIt ; it != end(Data) ; ++it) { temp = (*it * fCoefficient) + ((1-fCoefficient) * *(it - 1)) ; *it = temp ; } } }