알고리즘

퀘이크에 사용된 제곱근 함수의 위력

뉴턴-랩슨 방법으로 제곱근 계산제곱근의 알고리즘을 얘기하려면 이 알고리즘을 먼저 얘기해야 한다. 문제 설정 \(\sqrt{x\)를 직접 함수로 두면 반복식에 제곱근이 계속 등장해 비효율적이므로, 근 찾기 문제로 바꿔 접근한다. \[y^2 = x \quad \Rightarrow \...

원 일부의 면적을 적분으로 계산

이 글은 이전 글의 일부 내용에 대한 부가적인 설명 글. 위 그림에서 진한 색으로 표시된 영역의 면적을 적분으로 계산해보고 싶었다.프로그램으로 간단하게 계산하기 위해서는 근사해서 계산하는 방법이 있다.그런데, 좀 더 엄밀하게 계산하는 방법을 찾고 싶었다. Wolfram Alpha...

LUT 테이블을 constexpr로 생성해서 최적화하기

Spline64 보간법의 테이블 생성데이터를 변환하기 위해 LUT(Look-Up Table) 테이블을 사용할 수 있다.이 테이블은 미리 계산된 값을 저장하여, 런타임에 반복적인 계산을 피할 수 있게 해준다. Spline64 보간법을 적용하여 이미지 처리를 할 때도 LUT 테이블을 ...

for() 범위 관련한 간단한 비망록

for() 문 쓰면서 생각난 간단한 내용을 기술함. 기본형 \(n\)개의 데이터가 있고, 이를 \(i\)로 순회하는 경우 순회하는 범위는 다음과 같다.\([0,n-1]\) 그럼 \(i\)가 선회하는 최대 범위는 아래와 같다. \[\begin{align*i & \le n-1...

MFC에서 ARM64 환경인지 제대로 확인하는 법

현재의 ARM64 윈도우 환경에서는 x86/x64 어플리케이션도 대부분 실행이 가능하다.따라서, 대부분의 어플리케이션은 그냥 컴파일만 하면 사용할 수 있다. 그런데, 가끔씩은 자신이 어떤 환경에서 동작되는 어떤 프로그램인지 알아야 할 때가 있다. ARM64 윈도우가 등장하기 전까지...

회전각 둘을 연속적으로 계산해야 할 때 생각할 지점 하나

연속적인 오일러 회전의 순서에 따른 결과 차이오일러 회전을 연속적으로 계산할 때, \(roll\), \(pitch\), \(yaw\) 순서로 계산할 때와 역순으로 계산할 때는 결과가 다르다.아래 그림에서 \(beam1(= +z)\)을 \(beam2\)로 회전변환 할 때 \(\the...

C언어로 float16 빠르게 읽기

이전 글을 쓰고 나서 생각해보니 굳이 Half-precision floating-point(float16)을 일일이 읽을 필요가 없었다.IEEE 754 포맷에 맞춰 적절하게 변환하면 된다.

TIFF 읽기 전용 라이브러리 tiffloader

TIFF loader 소개TIFF 포맷을 다루기 위해선 역시 LibTIFF를 사용하는 것이 가장 보편적이다.그런데, 읽기 기능만을 사용하기 위해선 읽기에 특화된 tiffloader도 상당히 쓸만하다. TIFF loader, by Malcolm McLeanMeant to be a ...

UTF-8 포맷을 빠르게 감지하는 방법

파이썬으로 텍스트 파일을 읽다 문제가 터져서 빡치는 바람에 쓴 글. 사소한 시작발단은 사소했다.Spetral Python이라는 라이브러리를 사용하는데, 파일을 읽지 못하고 예외가 발생했다. Spectral 데이터는 텍스트 포맷의 ENVY 파일과 바이너리 포맷으로 구성되어 있다.이 ...

굉장히 빠르게 정규분포 난수 생성하기

들어가기에 앞서정규분포 난수 생성은 널리 사용되며, 특히 통계학과 데이터 과학에서 중요한 역할을 한다.가볍게 쓰기에는 파이썬이나 C++에서 제공하는 함수를 쓰면 된다. 그런데, 레이더 시뮬레이션 처럼 대량의 난수를 생성해야 할 때는 속도가 중요하다.이 경우에는 표준 라이브러리를 사...

자전에 의한 선속도 계산하기

아주 가끔 자전에 의한 지표면의 선속도를 계산해야 할 때가 있다.예를 들면, 인공위성과 지표면 사이의 도플러 센트로이드를 계산할 때라든가… 들어가기에 앞서인터넷을 조금 뒤져보면 지구의 자전 속도는 약 1674.4 km/h라고 한다.그런데, 뭔가 좀 이상하다. 지구 상에서 위치에 따...

C#에서 DllImport 대신 LibraryImport 사용하기

C# 만으로는 모든 기능을 구현할 수 없기 때문에 윈도우 등에서 만든 DLL을 사용해야 할 때가 있다.이를 위해 DllImport를 사용하는데, .NET 5부터는 DllImport 대신 LibraryImport를 사용할 수 있다.

C#에서 도로명 주소 검색 서비스 개발하기

도로명 주소를 검색하는 서비스는 흔하게 볼 수 있다.이제 국가주소정보시스템 자체가 안정화되어 도로명 주소 검색을 웹에서 개발하는 것은 어렵지 않다.예제 코드도 공개되어 있어서, 그대로 사용하면 된다. C#에서 이 서비스를 활용하는 방법을 간단하게 정리해본다. API 키 발급이 서비...

시놀로지 MariaDB에 SSH로 접속하기

시놀로지는 상당히 안정적인 NAS이면서, 데이터베이스로 MariaDB도 쓸 수 있다.덕분에 데이터베이스를 학습할 때 사용하기에 꽤 좋은 환경이다. 하지만, 이걸 좀 진지하게 사용하려면 조심해야 한다.NAS라는 장비의 특성상 전 세계에서 접속을 시도하는 해커들이 많기 때문이다.DB에...

해와 달의 위치 파이썬으로 간단히 알아보기

해와 달의 위치도 ISS 처럼 지구 중심으로부터 기술할 수 있을 것이다.하지만, 그렇게 기술하는 것은 일반적으로는 별 의미가 없다. 일단 지구 중심에서 거리가 너무 멀기 때문에 지구 중심 좌표계를 사용하면 값이 너무 커지기 때문이다. 해와 달의 위치는 관측자의 위치를 기준으로 방위...

국제우주정거장(ISS) 위치 파이썬으로 간단히 알아보기

국제우주정거장(ISS)이란국제우주정거장(International Space Station, ISS)은 지구 궤도를 도는 거대한 구조물이다.여러 국가들이 협력하여 만든 것으로, 1998년 11월 20일에 처음으로 인공위성으로 발사되었다. 비행 고도는 약 400 km이며, 지구를 9...

천문역학 파이썬 라이브러리 hapsira

우주 분야를 파이썬으로 다룰 땐 astropy와 poliastro가 가장 중요한 라이브러리들이다.여담이지만, astropy에서 사용되는 unit은 그 자체만으로 사용하기에도 편리하다.