"c++" 검색결과 (46)
  • 여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 마지막 날.

    몇가지 잘못 구현된 부분을 수정 하고, 간략화 하여 어느정도 복잡도를 가지는 영역 내를 채우는 것을 성공리에 완성 하였습니다. 아직 테스트를 해 보면 매우 복잡한 영역은 여전히 node 에서 잘못 처리되는 경우가 발견 되긴 합니다만, 이 부분은 다음 구현으로 넘기고 이번엔 완료된 것을 통해서 약간의 알고리즘 설명을 남겨 보도록 하겠습니다. 먼저 참고한 알고리즘은 Darel Rex Finley 라는 사람의 페이지를 통해서 입니다. Polygon fill algorithm 알고리즘은 알고나면 꽤 간단 합니다. 먼저, 삼각형을 하나 그린다 치면, 아래 처럼 좌표계가 만들어 지고, 이 좌표계는 vector < x, y > 에 차곡 차곡 쌓이게 됩니다. 여기서 vector < x, y > 는 0번째와 마지막 이 ..

    Developement/C/C++
    2016. 12. 21. 18:13
  • 여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 둘째날.

    이전에 polygon 내 fill 을 하기 위한 알고리즘을 파다, 여러 개선점을 찾기 위한 노력을 통해 답을 찾기 시작 하고 있습니다만, 현재 fill 을 실패 하는 이유를 찾기 위해 돌려 보고 있다 보니, 아래처럼 node 가 짝이 안맞는 경우가 생기는 것을 알았습니다. 최적화된 알고리즘 검출을 위해 re-order 등을 수행하는데도, 검출에 실패 하는 영역이 나오는 것을 보면, 이것은 다른 알고리즘을 찾아야 할 것으로 보입니다. 현재까지 돌려 본 것을 압축해서 올려 봅니다.코드 및 CBP, 디버깅용 바이너리 파일 압축본 다운로드 필요사항: Code::Blocks, MinGW-W64, FLTK-1.3.4 (또는 FLTK-1.3.4-TS).

    Developement/C/C++
    2016. 12. 20. 18:01
  • 여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 첫쨋날.

    librawprocessor 에 새로 끼워 넣고 싶은 기능 중 하나가, 바로 포토샵 같은데서 자주 쓰는 그물망 기능인가 하는 겁니다, 여러 포인트를 찍어 그 영역 안을 구하는 것. 그래서 그걸 FLTK 로 간단히 만들고, 내부 알고리즘은 다음 URL 을 통해 한번 구현을 해 보기로 했습니다.http://alienryderflex.com/polygon_fill/ 해당 싸이트엔 C 로 간단히 되어 있는걸 C++ 로 좀 더 복잡하게 변경 하여 만들어 보니 ... 간단한 벡터 그래픽 영역은 처리가 되는 것 같습니다만 ... 복잡도가 올라가면 실패를 합니다. 아직 이유는 알아 내야 하는 부분이 많습니다만, 현재 odd-even 검사 부분이 뭔가 누락이 되었다거나, conflict 영역 검출 등은 뭔가 원래 소스대..

    Developement/C/C++
    2016. 12. 19. 18:13
  • 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..

    Developement/C/C++
    2016. 11. 28. 14:18
  • MinGW-W64, CPU 명령어 빌드에 맞춰 구동 테스트 하기.

    만약 MinGW-W64 (또는 일반 MinGW) 에서 -mavx 또는 -march=corei7-avx 와 같은 빌드를 지시해서 만든 바이너리를 배포 하는데, 만약 이를 구동하는 PC 가 AVX 관련 명령어를 지원 하지 않는 환경에서 해당 바이너리를 구동하면? 이럴 경우 해당 바이너리는 그냥은 구동이 되나, AVX 관련 명령어가 실행 되는 위치에서 exception 을 뱉고, 해당 callstack 은 이전 pc 로 돌아가나, 여기서 문제가 발생 해서 함수 자체가 멍청이가 됩니다. 그래서 배포한 바이너리가 내가 빌드한 환경과 자동으로 구동 될 PC 에서의 환경과 맞는지를 간단히 테스트 할 수 있는 방법을 gcc 는 물론 MinGW 역시 지원 합니다. 이를 확인 하기 위해서는 먼저 #include 에 를 넣..

    Developement/C/C++
    2016. 11. 28. 14:11
  • 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 ..

    Developement/C/C++
    2016. 6. 22. 11:29
  • XML 을 통한 다국어 처리도 편리한 FLTK.

    XML 의 경우 여러 언어들을 처리 하기 위해 보통 UTF-8 인코딩을 사용합니다. 이 방식은 Windows 에서 사용하는 UNICODE 와 1:1 대응이 되지 않습니다, 그래서 보통 GUI 관련 쪽에서 바로 붙여 쓰기가 힘든 경우가 있는데, FLTK 의 경우 그대로 UTF-8 을 사용하고 있기 때문에 XML 에서 읽어온 다국어 코드를 별도의 변환 없이 사용이 가능 합니다. 그래서 올바른 Font 를 Load 한 상태 라면 (보통 FL_FREE_FONT 에 bind 해서 씁니다) 다국어 출력에 어려움이 없이 편리하게 구현이 가능하다는 장점이 있습니다. 또한 이런 부분은 타 OS로 소스를 그대로 사용할 경우 발생 할 수 있는 호환성도 매우 많이 해결 해 주기 때문에 자원 낭비를 많이 줄일 수 있는 장점이 ..

    Developement/C/C++
    2016. 6. 14. 14:19
  • MinGW-W64 용 DirectInput 소스 (키보드,마우스,조이스틱)

    MinGW-w64 프로젝트 부터 DirectX 관련 SDK 가 포함 되어 있으므로 윈도우 어플 개발에 매우 편리함을 얻을 수 있습니다만, MFC 처럼 뭔가 꽁꽁 묶여져 있는거 찾기가 사실 어렵다 보니 직접 만들어 써야 하는게 많은건 사실 입니다. 대신 쾌적함을 얻을 수 있는건 덤 이지만 ... 그래서 제가 진행 중인 프로젝트 중에 DirectX 의 2D, input 을 가져다 쓰면서 좀 더 편리하게 써 보고자 만들었던 것을 공유 하고자 합니다. 사용은 간단 합니다. 먼저 현재 사용되는 윈도우에 생성 부분 쪽에 InitDirectInput() 를 사용하여 Dinput 을 초기화 합니다. 이떄 반환되는 값은 HRESULT 가 아니라 DXINPUT_INIT_RESULT_KEYBOARD, DXINPUT_INIT..

    Developement/C/C++
    2015. 12. 15. 13:53
  • DirectX 2D 창 메뉴가 안뜨면 창을 옮기리.

    부제: DirectX 2D 와 DSound 함께 쓰기 @ Windows7, 8.x 저번 주 에 있었던 DirectX 2D 를 좀 더 개선 하여 다음과 같이 구현 하였습니다.PNG 이미지를 가져와서 D2D 이미지(텍스쳐)로 사용 하도록 함.Dsound 로 WAV 파일을 가져와 출력 하도록함, 백그라운드와 클릭 시 나오는 소리 2가지. 상단 30px 안에서 마우스 왼쪽 클릭 해서 끌면 창 전체가 이동 하도록 함. 렌더링을 thread 로 하도록 함.약간의 UI 적인 요소. 별 대단한 기법이 들어 간 것은 아닙니다만, DirectX 2D 와 Dsound 겹쳐서 쓰는 예제들이 너무 없어서 직접 병합 해 보았습니다. 소스는 MinGW-W64 에서 빌드 되도록 되어 있으며, Code::Blocks 의 프로젝트를 사..

    Developement/C/C++
    2015. 11. 23. 17:38
  • MinGW 용 DirectX 8 input Joystick(조이스틱) 예제 (src, lib 포함)

    MinGW 에서 DirectX 쓰기란 MinGW-W64 오면서 참 많이 편해진 편 입니다만, 여전히 MSDN 에서 제공하는 기본 예제 조차 컴파일이 안되는 비극을 보면 갈 길이 멀어 보이기도 합니다. 이번엔 Joystick 을 DInput 으로 처리 하려니 되는게 없어 Wine 용 DirectX8 header 와 library 등을 MSDN 에서 제공하는 예제 소스와 함께 빌드 할 수 있도록 만들었습니다. 현재 이 소스는 MinGW-W64 기준 최신버젼 (5.1) 에서 빌드가 가능하며, CodeBlocks 에서 project 파일만 열어서 빌드 후 테스트 가능 합니다. 소스는 아래 첨부파일로 붙임을 하겠으며, 원래 소스가 MSDN 공개에서 가져 왔으며, DirectX8 기준이긴 하나, 이쪽 부분은 발전이..

    Developement/C/C++
    2015. 8. 4. 14:21
  • MinGW 에서 pthread 와 빌드시 time 구조체 오류 날때.

    MinGW 에서 빌드를 할때 특정 라이브러리를 M-Sys 를 통해 빌드 하다 보면 다음 오류를 볼 경우가 많습니다. error: redefinition of 'struct timespec' 이런 경우는 대부분 pthread 내에 다음과 같이 정의 되어 있는걸 확인 해 볼 수 있습니다. #if !defined(HAVE_STRUCT_TIMESPEC) #define HAVE_STRUCT_TIMESPEC #if !defined(_TIMESPEC_DEFINED) #define _TIMESPEC_DEFINED struct timespec { time_t tv_sec; long tv_nsec; }; #endif ⁄* _TIMESPEC_DEFINED *⁄ #endif ⁄* HAVE_STRUCT_TIMESPEC *⁄ 해..

    어떻게 할까/소프트웨어
    2015. 4. 3. 11:23
  • HTTP/1.1 의 POST 때문에 살짝 고민한 문제 ....

    이전에 만든 HTTP/1.0 용 socket source 를 POST 까지 되도록 버그를 수정 하면서 HTTP/1.1 으로 호환되게 변경 하다 보니 알수 없는 문제를 격었습니다. 바로 해당 서버(Apache2 + PHP5) 에서 $_POST[x] method 를 이용해서 넘어 온 것이 없는 듯이 인식 한다는 점 이었습니다만, 여러번의 시도 중 다음 header 인자가 중요하다는 것을 알았습니다. 바로 Content-Type 이 문제 였습니다. PHP5 에서 제대로 POST 되는 내용을 알려면 Content-Type 을 application/x-www-form-urlencoded 로 써야 인식을 하는 것 이었습니다. 기존엔 text/html 로 mime 을 지정해서 보냈더니 이걸 인식 못하는 문제를 이제 ..

    Developement/C/C++
    2015. 2. 23. 17:12
  • [FLTK] Fl_Group 을 이용한 화면 분할 및 자동 크기 조정.

    FLTK 는 Windows 나 X11 에서 창의 크기를 조정 할 수 있도록 만들어 져 있습니다만, 기본적으로 resize 를 지원 할 경우 최초 만들어진 창의 크기에 각 위젯(Fl_Widget) 들이 만들어진 크기의 비율(ratio) 로 그 크기가 조정 되게 됩니다. 이런 방법은 최초 만들어진 UI 의 디자인적 요소를 해치지 않고 그 비율을 유지 한다는 장점이 있을 수도 있지만, 좀 더 detail 한 UI 를 적용 하는데 있어서는 오히려 해가 되는 경우가 있습니다. 예를 들어 다음과 같이 만들어진 프로그램의 경우, 최초 실행되는 크기에서 윈도우 크기를 변경 할 경우 비율대로 커지게 되면 다음과 같이 글자 크기만 빼고 비율 대로 늘어지는 모습을 가지게 됩니다. 비율대로 커지는것 까지는 좋게 생각할 수 있..

    Developement/C/C++
    2014. 7. 22. 14:34
  • [FLTK] X11/nano-X 에서 FLTK 화면 flushing

    FLTK 를 X11 이나 nano-X 에서 그리는 경우 화면 갱신을 Fl::check(); 또는 Fl::wait(); 등으로 갱신 시키지 않는 방법으로 이전의 글을 posting 했습니다만, 실제 nano-X 에서는 XFlush() 를 쓰지 않고 갱신 하는 것이 좀 더 안정이 있는 것으로 판단 되어 수정된 코드를 올립니다. 특히 XFlush() 는 thread-unsafe 이므로 중복으로 호출 되는 경우가 없어야 하는 것을 고려 해야 하므로 static bool 변수를 하나 사용하여 중복 호출의 위험을 줄였습니다. #ifdef _WIN32 #include #else #include #endif static bool isRedrawingFLTK = false; void RedrawFLTK() { if ( ..

    Developement/C/C++
    2014. 7. 21. 16:19
  • [FLTK] Win32/X11 에서 FLTK 고속 rednering (또는 redraw)

    FLTK 에서는 사실상 Fl::check(); 나 Fl::wait(); 등으로 화면을 갱신 하는 방법이 있습니다. 하지만 이 방법을 사용할 경우 잘못된 화면 출력이나 프로그램 자체가 멈추는 문제가 발생되는 단점이 있습니다. 실질적으로 FLTK 는 강제적인 redraw 를 할수 있는 조건을 FLTK 자체가 결정 하는 구조이며, Windows 에서는 비활성화 된 Window 에서는 1초에 한번 그리는 경악적인 상태로 바뀝니다. 문제는 활성화 된 상태 이더라도 Fl_Window 객체를 아무리 redraw(); 하더라도 갱신은 "니 맘대로 되는것이 아니란다" 라는 단점이 있습니다. 이를 해결 하기 위해 여러 방법을 찾다가 문듯, 활성화된 FLTK Window 위에서 마우스를 계속 움직이면 고속으로 화면이 갱신 ..

    Developement/C/C++
    2014. 7. 18. 17:08