본문 바로가기

Developement

(142)
여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 마지막 날. 몇가지 잘못 구현된 부분을 수정 하고, 간략화 하여 어느정도 복잡도를 가지는 영역 내를 채우는 것을 성공리에 완성 하였습니다. 아직 테스트를 해 보면 매우 복잡한 영역은 여전히 node 에서 잘못 처리되는 경우가 발견 되긴 합니다만, 이 부분은 다음 구현으로 넘기고 이번엔 완료된 것을 통해서 약간의 알고리즘 설명을 남겨 보도록 하겠습니다. 먼저 참고한 알고리즘은 Darel Rex Finley 라는 사람의 페이지를 통해서 입니다. Polygon fill algorithm 알고리즘은 알고나면 꽤 간단 합니다. 먼저, 삼각형을 하나 그린다 치면, 아래 처럼 좌표계가 만들어 지고, 이 좌표계는 vector 에 차곡 차곡 쌓이게 됩니다. 여기서 vector 는 0번째와 마지막 이 ..
여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 둘째날. 이전에 polygon 내 fill 을 하기 위한 알고리즘을 파다, 여러 개선점을 찾기 위한 노력을 통해 답을 찾기 시작 하고 있습니다만, 현재 fill 을 실패 하는 이유를 찾기 위해 돌려 보고 있다 보니, 아래처럼 node 가 짝이 안맞는 경우가 생기는 것을 알았습니다. 최적화된 알고리즘 검출을 위해 re-order 등을 수행하는데도, 검출에 실패 하는 영역이 나오는 것을 보면, 이것은 다른 알고리즘을 찾아야 할 것으로 보입니다. 현재까지 돌려 본 것을 압축해서 올려 봅니다.코드 및 CBP, 디버깅용 바이너리 파일 압축본 다운로드 필요사항: Code::Blocks, MinGW-W64, FLTK-1.3.4 (또는 FLTK-1.3.4-TS).
여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 첫쨋날. librawprocessor 에 새로 끼워 넣고 싶은 기능 중 하나가, 바로 포토샵 같은데서 자주 쓰는 그물망 기능인가 하는 겁니다, 여러 포인트를 찍어 그 영역 안을 구하는 것. 그래서 그걸 FLTK 로 간단히 만들고, 내부 알고리즘은 다음 URL 을 통해 한번 구현을 해 보기로 했습니다.http://alienryderflex.com/polygon_fill/ 해당 싸이트엔 C 로 간단히 되어 있는걸 C++ 로 좀 더 복잡하게 변경 하여 만들어 보니 ... 간단한 벡터 그래픽 영역은 처리가 되는 것 같습니다만 ... 복잡도가 올라가면 실패를 합니다. 아직 이유는 알아 내야 하는 부분이 많습니다만, 현재 odd-even 검사 부분이 뭔가 누락이 되었다거나, conflict 영역 검출 등은 뭔가 원래 소스대..
STL C/C++ 에서 자동 Locale 설정 하기. MinGW-W64 가 버젼이 올라 감에 따라 다국어 처리도 강화 되고 있습니다만, 표준 C/C++ 에서 자동으로 한국어 또는 구동되는 OS 에 맞게 std/stl 의 locale 설정을 하고 싶어서 아래 코드 처럼 만들었습니다. 물론 이는 Windows 에서만 해당 하는 부분이며, 사용을 위해서는 와 를 #incldue 로 넣어 주어야 합니다. void procLocale() { #ifdef DEBUG printf("### AUTO LOCALE SET @ WINDOWS ###\n"); #endif ⁄⁄⁄ of DEBUG LCID currentLCID = GetSystemDefaultLangID(); wchar_t currentLoc[LOCALE_NAME_MAX_LENGTH] = {0}; char conv..
MinGW-W64, CPU 명령어 빌드에 맞춰 구동 테스트 하기. 만약 MinGW-W64 (또는 일반 MinGW) 에서 -mavx 또는 -march=corei7-avx 와 같은 빌드를 지시해서 만든 바이너리를 배포 하는데, 만약 이를 구동하는 PC 가 AVX 관련 명령어를 지원 하지 않는 환경에서 해당 바이너리를 구동하면? 이럴 경우 해당 바이너리는 그냥은 구동이 되나, AVX 관련 명령어가 실행 되는 위치에서 exception 을 뱉고, 해당 callstack 은 이전 pc 로 돌아가나, 여기서 문제가 발생 해서 함수 자체가 멍청이가 됩니다. 그래서 배포한 바이너리가 내가 빌드한 환경과 자동으로 구동 될 PC 에서의 환경과 맞는지를 간단히 테스트 할 수 있는 방법을 gcc 는 물론 MinGW 역시 지원 합니다. 이를 확인 하기 위해서는 먼저 #include 에 를 넣..
FLTK version 1.3.4-1 릴리즈! 2016년 11월 15일, 드디어 FLTK 1.3.4-1 버젼이 릴리즈 되었습니다. 물론 저는 이에 맞춰 제가 개조해 쓰는 FLTK-1.3.4-1-ts 를 따로 clone 하기도 했습니다만, 1.3.3 으로 부터 뭔가 많은 발전이 있었으며, 특히나 Fl::flush() 와 같은 부분에 신경을 쓴 듯 합니다. FLTK 1.3.4-1 이 1.3.3 마지막 버젼으로 부터 변경된 사항들을 나열해 보면 다음과 같습니다. (원문)FLTK 1.3.4-1 에셔 변경된 점 릴리즈 날짜: 2016년 11월 15일 버그 수정 및 추가 개선사항 - 윈도우즈 IDE 중 비주얼스튜디오 2008과 2010의 빌드 요소중 폴더 위치 참조를 변경함. 주: 이 패치 릴리즈(1.3.4-1) 은 비주얼 스튜디오가 참조하는 폴더 위치만 업데..
Windows API 를 이용해 Serial Port 찾기. Windows 에서 개발 하는 과정에서 COM port 를 찾는 방법은 여러가지가 있긴 합니다만, 명확히 USB 나 Bluetooth 와 같은 기기들이 연결 되었을 때 이것을 다 찾아 내는 방법은 애매한 경우가 더러 있습니다. 저의 경우는 기존에 SetupDiEnumDeviceInterfaces() 를 사용한 방법을 쓰다가, Windows 10 으로 올린 다음 부터 USB 장치로 인식한 COM port 가 검색이 되질 않아 좀 더 애를 먹었습니다만, 간단히 GUID 를 GUID_DEVINTERFACE_COMPORT 로 쓰던걸 GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR 로 변경하기만 해도 문제가 해결 되었습니다. 각 GUI 는 다음과 같은 값을 가집니다. (mingw-w64 ..
XML 을 통한 다국어 처리도 편리한 FLTK. XML 의 경우 여러 언어들을 처리 하기 위해 보통 UTF-8 인코딩을 사용합니다. 이 방식은 Windows 에서 사용하는 UNICODE 와 1:1 대응이 되지 않습니다, 그래서 보통 GUI 관련 쪽에서 바로 붙여 쓰기가 힘든 경우가 있는데, FLTK 의 경우 그대로 UTF-8 을 사용하고 있기 때문에 XML 에서 읽어온 다국어 코드를 별도의 변환 없이 사용이 가능 합니다. 그래서 올바른 Font 를 Load 한 상태 라면 (보통 FL_FREE_FONT 에 bind 해서 씁니다) 다국어 출력에 어려움이 없이 편리하게 구현이 가능하다는 장점이 있습니다. 또한 이런 부분은 타 OS로 소스를 그대로 사용할 경우 발생 할 수 있는 호환성도 매우 많이 해결 해 주기 때문에 자원 낭비를 많이 줄일 수 있는 장점이 ..