전체 글 288

[CG] Scene Graph - 재정리

Scene Graph는 컴퓨터 그래픽, 게임 개발, 가상 현실 애플리케이션에서 graphic scene의 논리적이고 종종 공간적인 표현을 관리하고 구성하기 위해 일반적으로 사용되는 데이터의 구조다. 이를 통해 개발자는 오브젝트, 조명, 카메라 등 많은 요소가 포함된 복잡한 장면을 구조화된 방식으로 처리할 수 있다. Scene Graph의 핵심 개념은 scene의 오브젝트를 그래프의 노드로 표현하는 것으로, 각 노드는 여러 개의 자식을 가질 수 있지만 일반적으로 하나의 부모만 가질 수 있다. 이러한 계층적 구조를 통해 오브젝트와 그 속성은 물론 오브젝트 간의 관계를 효율적으로 관리할 수 있다. 예를 들어, 부모 노드에 적용된 변환(이동, 회전, 크기 조정 등)은 모든 자식에 자동으로 영향을 미치므로 캐릭터..

[Algorithm] Rabin-Karp Algorithm (라빈-카프 알고르짐)

Rabin-Karp Algorithm은 hasing을 사용해 텍스트의 패턴 문자열 집합 중 중 하나를 찾는 문자열 검색 알고리즘이다. 1987년 마이클 라빈(Michael Rabin)과 Richard Karp(리차드 카프)가 개발했다. 이 알고리즘의 핵심 아이디어는 검색하려는 패턴의 해시값을 계산한 다음 이 해시를 패턴과 길이가 같은 텍스트의 하위 문자열의 해시값과 비교하는 것이다. 이 방법을 사용하면 패턴과 일치할 가능성이 없는 텍스트의 많은 부분을 빠르게 건너뛸 수 있기 때문에 특히 패턴이 텍스트보다 훨씬 작은 경우 검색의 속도를 크게 높일 수 있다. 알고리즘의 개요는 아래와 같다. 해시 함수 : 각 문자열을 숫자 값으로 변환하는 해시 함수를 선택한다. 초기 해시 값 : 길이가 m인 패턴 P의 해시값..

[Embedded] Potentiometer (포텐셔미터, 가변 저항)

Potentiometer는 저항 값을 수동으로 조절할 수 있는 일종의 가변 저항기이다. 기본적으로 3단자 장치로 작동하며, 두 단자는 저항 요소의 끝에 연결되고 세 번째 단자는 저항 요소를 가로질러 이동하는 와이퍼 또는 슬라이더에 연결된다. 와이퍼의 위치를 조정해 와이퍼와 저항의 각 끝 사이의 저항을 변경해 장치 전체의 전압을 효과적으로 나눌 수 있다. Potentiometer는 전자 회로에서 전기 신호의 레벨을 제어하고, 볼륨을 조정하고, 강도 수준(조명 같은)을 수정하며, 회로를 특정 주파수에 맞게 조정하는 등 다양한 용도로 널리 사용된다. 회전식 (와이퍼가 원형 호를 그리며 회전하는 형태) 및 선형 (와이퍼가 직선 경로를 따라 미끄러지는 형태) 등 다양한 형태가 있다. Potentiometer의 주..

[Embedded] Resistor (저항기)

Resistor는 전자 회로에서 전류의 흐름을 제한하거나 조절하는 수동 전기 부품이다. 거의 모든 전자 기기의 기본 요소로 전류 흐름 감소, 신호 레벨 조정, 전압 분할, 능동 소자 바이어스, 전송선 종단 등 다양한 용도로 사용된다. Resistor의 저항은 옴의 법칙을 발견한 게오르그 사이먼 옴(Georg Simon Ohm)의 이름을 따서 Ohm(옴, Ω) 단위로 측정된다. 이 법칙에 따르면 두 지점 사이의 도체를 통해 흐르는 전류(I)는 두 지점 사이의 전압(V)에 정비례하고 도체의 저항(R)에 반비례한다. 이 공식은 V = I R 로 표현한다. Resistor는 고정식 또는 가변식으로, 고정 저항기(fixed resistor)는 저항 값이 변하지 않는 반면, 가변 저항기(variable resist..

[Embedded] Capacitor (커패시터, 축전기)

Capacitor는 전기 에너지를 저장하고 방출하는 전자 부품이다. 흔히 콘덴서(condensor)라고도 불리는데, 'condensor'는 영미권에서 응축기의 의미로 사용되는 경우가 많다. 유전체라는 절연 재료로 분리된 두개의 도체로 구성된다. 도체에 전압이 가해지면 유전체에 전기장이 발생해 한 도체에는 양전하가, 다른 도채에는 음전하가 쌓이게 된다. 이러한 전하 저장 능력 덕분에 Capacitor는 전원 공급 장치, 신호 필터링, 타이밍 애플리케이션 등 전기 및 전자 회로에서 다양한 기능을 수행할 수 있다. Capacitor의 기본 단위는 farad(F, 패럿 - 마이클 패러데이의 이름에서 따왔다.)으로 Capacitor의 플레이트에 단위 전압당 전하를 저장할 수 있는 능력을 측정하는 단위다. 그러나 ..

[Algorithm] Lowest Common Ancestor (LCA)

이진 트리 또는 이진 검색 트리(BST)에서 두 노드의 최하 공통 조상(LCA)를 찾는 데는 몇 가지 일반적인 접근 방식이 있다. 가장 좋은 방법은 트리이 특정 특성(BST 인지, 균형이 잡혀있는지(balanced) 등)과 추가 정보 (각 노드의 조상 또는 트리의 전처리 기능 등)에 따라 달라진다. 아래는 몇 가지 일반적인 방법이다. Single Traveral Method (단일 순회 방법, 재귀 사용) : 이 방법은 추가 정보가 제공되지 않는 트리에서 LCA를 찾는 데 널리 사용되는 방법이다. 아이디어 : 루트에서 시작해 트리를 순회한다. 각 노드에 대해 현재 노드가 LCA를 찾고자 하는 두 노드 중 하나인지 확인한다. 맞다면 현재 노드를 반환한다. 그렇지 않으면 왼쪽 및 오른쪽 자식에 대해 재귀 호..

[Tech, etc.] DSF - 2

DSF 약어는 상황에 따라 다양한 유형의 파일 형식을 나타내며, 그 중 하나는 소프트웨어 개발 및 프로그래밍에 사용된다. 이전 포스팅의 고해상도 오디오에 사용되는 Direct Stream Digital (DSD) 오디오 파일 형식 외에도 DSF는 소프트웨어 애플리케이션의 데이터를 로드, 조작 또는 포함하는 데 사용되는 파일 형식을 지칭할 수도 있다. 소프트웨어 개발 및 프로그래밍 문맥에서 DSF 파일은 아래와 같다. Delusion Digital Sound File : 사운드 데이터를 저장하기 위해 구형 컴퓨터 게임이나 응용 프로그램에 사용된다. Dyalog APL Seed File : 작업 공간 데이터를 저장하기 위해 고급 프로그래밍 언어인 Dyalog APL에서 사용된다. Document Struct..

[Tech, etc.] DSF - 1

DSF 파일은 디지털 오디오 콘텐츠, 특히 DSD(Digital Stream Digital) 포맷을 저장하는 데 사용된다. 이 형식은 일반적으로 고해상도 오디오 파일에 사용되는데, DSF 형식을 사용하면 트랙 제목, 앨범 아트, 아티스트 세부 정보와 같은 정보를 포함한 메타데이터를 오디오 데이터와 함께 저장할 수 있다. 특히 원본 스튜디오 녹음의 고음질을 보존할 수 있어 오디오 애호가와 전문 오디오 제작 환경에서 선호되는 형식이다. DSF 파일은 고해상도 오디오 포맷으로 음악을 배포하는 데 자주 사용되며, 기존의 컴팩트 디스크 디지털 오디오를 능가하는 수준의 음질을 제공한다.

[C++] Windows Application Subsystem

Windows 애플리케이션은 Console, Windows 두 개의 하위 시스템으로 컴파일이 가능하고, 이 설정은 런타임에 운영체제가 애플리케이션을 어떻게 처리할지를 결정한다. Console Application (CONSOLE subsystem) : 이 유형의 애플리케이션은 console/terminal 과 상호 작용하도록 설계됐다. 실행 시 Windows는 애플리케이션에 콘솔 창은 열결해 std::cout, std::cin 및 기타 표준 C++ I/O 작업을 콘솔 창에서 볼 수 있다. 기존 Command Line Interface (CLI) 에서 콘솔 애플리케이션을 실행하는 경우 기존 콘솔을 출력에 사용한다. Windows Applicaiton (WINDOWS subsystem) : 일반적으로 사용자..

[C++] OutputDebugString() 함수

OutputDebugString() 는 개발자가 디버그 정보를 디버그 출력 창에 출력할 수 있도록 설계된 Windows API 함수다. 이 기능은 프로세스에 디버거가 연결되어 있지 않더라도 프로그래머가 디버거의 출력 창이나 Sysinternals의 DebugView와 같은 도구로 직접 메시지를 보낼 수 있어 개발 및 디버깅 세션 중에 특히 유용하다. 디버깅을 위해 std::cout 을 통해 로그를 출력을 할 수도 있지만, GUI Windows 애플리케이션을 개발할 때 std::cout 으론 출력이 되지 않아(AllocConsole() 같은 다른 함수 추가 등으로 출력 가능), OutputDebugString() 를 사용해 출력할 수 있다. OutputDebugString() 의 구문은 아래와 같다. vo..