-
42Seoul
[C] stat / lstat / fstat 함수
파일 상태(정보) 가져오기 지정한 파일의 정보를 담고 있는 stat 구조체를 통해 정보를 얻을 수 있는 시스템 함수들 ls -al 명령어로 알 수 있는 내용들을 대부분 알 수 있다. #include int fstat(int fildes, struct stat *buf); int lstat(const char *restrict path, struct stat *restrict buf); int stat(const char *restrict path, struct stat *restrict buf); 구조체 stat - 함수의 인자로 들어가는 struct stat - st_dev - 파일을 포함하는 디바이스 번호 - st_mode - 파일의 모드 (접근권한) - 파일 종류 비트 마스크로 표시됨 - st_nl..
-
영상처리 & opencv
[opencv] 직선 검출(Line Detection)
참고 출처 : https://076923.github.io/posts/Python-opencv-28/ https://opencv-python.readthedocs.io/en/latest/doc/25.imageHoughLineTransform/imageHoughLineTransform.html https://ko.wikipedia.org/wiki/%ED%97%88%ED%94%84_%EB%B3%80%ED%99%98 직선 검출 알고리즘: 허프 변환(Hough Transform)을 활용 (위 출처의 이론적인 설명이 자세하게 나와 있습니다 ) 위의 사진처럼 3개의 점에 대해서 원점에서 각 점까지의 거리를 𝜃, r로 표현할 수 있다. 이 곡선은 각 점(x, y)에 대해서 r=xsinθ+ycosθ을 만족한다. 허프 ..
-
알고리즘
[알고리즘] 3-Way inPlaceQuickSort - 네덜란드 국기 알고리즘
서론 quick sort quick sort는 기준 원소 pivot을 설정 후 기준 원소보다 작은 / 기준 원소와 같은 / 기준 원소보다 큰 리스트 3개로 분할하여 정렬한다. 따라서 입력 리스트의 모든 원소는 세 개의 부 리스트 중 하나에 삽입된다. inPlaceQuickSort quick sort는 제자리에서 수행되도록 구현이 가능하다. 입력 리스트의 원소를 재배치할 때 값을 삽입하는 대신 대체 작업을 수행한다. 대체란 입력 리스트 내에서 재배치되어야 할 원소들의 자리를 맞바꾸는 것이다. ※ 지금부터 설명하는 부분은 inPlaceQuickSort를 구현할 때 배열로 구현한다고 가정한다. 연결리스트에서는 쉽게 해결이 가능한 문제이기에 고민할 필요가 없었다. ※ quicksort를 진행할 때 분할 과정에 ..
-
영상처리 & opencv
[opencv] 3개의 사진 Panorama(image stitching)
Panorama 구현 과정 1. Image stitching을 수행할 이미지들을 획득한 후 로드 한다. Grayscale로 변환해서 사용한다. 2. SURF 알고리즘을 사용하여 각 이미지의 특징점을 추출한 후 이미지들 간의 특징점을 비교하여 좋은 특징점들끼리 매칭시킨다. 3. 이미지들을 하나의 평면에 투영시키기 위해서 이미지 간의 변환관계(Homography)를 계산한다. 이때 모델 파라미터의 예측을 방해하는 대응점(Outlier)로부터 정확한 변환관계를 구축하기 위해 RANSAC 알고리즘을 사용한다. 4. 앞에서 계산한 Homography를 사용하여 이미지에 회전 변환을 적용하여 Image stitching을 실행한다. 주요 알고리즘 이론 : SURF, RANSAC, Homography 환경 : ope..
-
unity
[unity] #8. 화살 피하기 게임 - 1
- 화살 피하기 게임 화면 가운데 플레이어, 오른쪽 위에는 HP 게이지를 표시한다. 화살이 위에서 아래로 떨어지고 플레이어를 좌우 화살표 버튼을 움직여 화살을 피한다. 플레이어가 화살에 맞으면 HP 게이지가 줄어든다. - 게임 설계 오브젝트 : 플레이어, 화살, 배경, 이동 버튼, HP 게이지 1. 움직이는 오브젝트 : 플레이어, 화살 --> 컨트롤러 스크립트 필요 2. 게임을 플레이할 때 생성될 오브젝트 : 화살 --> 제너레이터 스크립트 필요 더보기 게임 도중에 오브젝트를 자동 생성하려면 생성을 담당할 공장이 필요하다. 공장을 가동시키기 위해서 제너레이터 스크립트가 필요하다. 화살 제너레이터 --> 화살을 1초에 1개씩 생성 3. 진행 상황을 보면서 UI를 갱신하는 감독 : HP 게이지 --> 감독 ..
photo
new
-
study [nvme-cli] command 추가 방식 nvme-builtin.h 구조와 command 추가 방식https://github.com/linux-nvme/nvme-cli/blob/master/nvme-builtin.h COMMAND_LIST( ENTRY("list", "List all NVMe devices and namespaces on machine", list) ENTRY("list-subsys", "List nvme subsystems", list_subsys) // ... (중략)); COMMAND_LIST와 ENTRY 매크로를 사용해서 명령어(command) 정의각 ENTRY는 명령어 이름, 설명, 그리고 실제로 실행될 함수명을 인자로 받음이 구조는 새로운 명령어를 추가할 때 ENTRY를 하나 더 추가하면 되도록 설계되.. -
CS [CS/책] 「오브젝트」6장 - 메시지와 인터페이스 책 「오브젝트」 6장 메시지와 인터페이스를 읽고 작성한 내용입니다.클래스라는 구현 도구에 지나치게 집착하면 경직되고 유연하지 못한 설계에 이를 확률이 높아진다.훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아니라 객체를 지향해야 한다. 좀 더 정확하게 말해서 협력 안에서 객체가 수행하는 책임에 초점을 맞춰야 한다. 여기서 중요한 것은 책임이 객체가 수신할 수 있는 메시지의 기반이 된다는 것이다.애플리케이션은 클래스로 구성되지만 메시지를 통해 정의된다는 사실을 기억하라[Metz12].협력과 메시지클라이언트-서버 모델협력은 어떤 객체가 다른 객체에게 무언가를 요청할 때 시작된다[Wirfs-Brock03].협력 안에서 메시지를 전송하는 객체를 클라이언트, 메시지를 수신하는 객체를 서버라고 부른다. 협력은 클라..
-
CS [CS/책] 「오브젝트」5장 - 책임 할당하기 책 「오브젝트」 5장 책임 할당하기를 읽고 작성한 내용입니다. 데이터 중심 설계로 인해 발생하는 문제점을 해결할 수 있는 가장 기본적인 방법은 데이터가 아닌 책임에 초점을 맞추는 것이다. 책임에 초점을 맞춰서 설계할 때 직면하는 가장 큰 어려움은 어떤 객체에게 어떤 책임을 할당할지를 결정하기가 쉽지 않다는 것이다. 책임 할당 과정은 일종의 트레이드오프 활동이다. 동일한 문제를 해결할 수 있는 다양한 책임 할당 방법이 존재하며, 어떤 방법이 최선인지는 상황과 문맥에 따라 달라진다. 따라서 올바른 책임을 할당하기 위해서는 다양한 관점에서 설계를 평가할 수 있어야 한다. 실제 설계는 코드를 작성하는 동안 이뤄진다. 그리고 협력과 책임이 제대로 동작하는지 확인할 수 있는 유일한 방법은 코드를 작성하고 실행해 보..
-
CS [CS/책] 「오브젝트」4장 - 설계 품질과 트레이드오프 책 「오브젝트」 4장 설계 품질과 트레이드오프를 읽고 작성한 내용입니다. 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다[Evers09]. 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것이다. 요즘 프로젝트를 진행하면서 설계는 매우 어렵다는 것을 깨닫고 있다. 4장을 읽으며 객체지향 설계를 데이터 중심으로 잘못하고 있다는 것을 한번 더 깨달았고, 의욕 넘치게 리팩토링을 시도해 보았으나.. 생각처럼 쉽지 않았다. 그래도 이번 기회에 문제라는 것을 상기하고 갈 수 있어서 좋았다. 데이터 중심 관점 객체의 상태는 구현에 속한다. 구현은 불안정하기 때문에 변하기 쉽다. 상태를 객체 분할의 중심축으로 삼으면 구현에 관..