본문 바로가기

Computer9

블랙홀 시뮬레이션 - 2. 구현 1편 블랙홀 시뮬레이션 - 1. 일반상대론 설명블랙홀 시뮬레이션을 만들었음. 작년에 학교에서 일반상대론을 배웠는데 이걸 가지고 뭔가 재밌는 짓을 하고 싶었음. 슈바르츠실트 블랙홀 정도면 쉽게 시뮬레이션을 만들 수 있을 것 같아 이ellipsoid.tistory.com그럼 이제 어떻게 구현했는지 알아보자. 레이 마칭레이 마칭은 카메라 앞에 스크린이 있다고 가정할 때, 카메라와 스크린 위의 점을 잇는 광선을 만들어서 물체에 부딫힐 때 까지 전진시키는 방법임. 게임에서 접할 수 있는 레이트레이싱과 좀 비슷한 기술인데, 레이 트레이싱은 광선-물체의 부딫힘을 이용하지만, 레이 마칭은 주변 물체와의 거리를 이용해서 광선을 전진시키며 물체와 부딫힐 때 까지 조금씩 전진시키는 방법임.저렇게 써 놓으면 아무도 이해 못하.. 2024. 8. 23.
최척화된 Barnes-Hut 시뮬레이션 쿼드트리 멀티스레딩, Cache locality를 최대한 지킨 코드를 만들었다. 아직 배열 기반 스택을 사용하진 않아서 완벽하진 않지만, 조금만 손보면 CUDA에도 거의 그대로 이식 가능할 정도로 만들었다. 3차원 모델을 빨리 만들고 다음 주제인 SPH 시뮬레이션으로 넘어가야겠다. 만드는 데 최적화 생각을 상당히 많이 해야하기도 했고 어려운 알고리즘이 많이 사용되기도 했고 학교다니느라 시간이 없어서 오래 걸렸음. 2023. 12. 28.
배열 쿼드트리 #include #include #include const int NULL_INDEX = -1; constexpr int MAX_NODES = 1000; constexpr int MAX_PARTICLES = 1000; float nodeX[MAX_NODES]; float nodeY[MAX_NODES]; float nodeWidth[MAX_NODES]; float nodeHeight[MAX_NODES]; int nodeParticleIndex[MAX_NODES]; int nodeChildren[MAX_NODES][4]; float particleX[MAX_PARTICLES]; float particleY[MAX_PARTICLES]; float particleMass[MAX_PARTICLES]; int no.. 2023. 9. 16.
하스켈 콘웨이의 생명 게임 https://github.com/hydrogendeuteride/HaskellGameOfLife GitHub - hydrogendeuteride/HaskellGameOfLife: conway`s game of life written in haskell conway`s game of life written in haskell. Contribute to hydrogendeuteride/HaskellGameOfLife development by creating an account on GitHub. github.com 하스켈 연습용으로 한번 만들어봄. 만들어보니까 알겠는데 하스켈은 리스트 탐색이 양날의 검인듯. 벡터나 셋이 있긴 해서 다행이지만, 리스트만으로는 시간 복잡도가 심하게 늘어나는 경우가 있음. 벡.. 2022. 2. 26.
쿼드트리 Barnes-Hut 천체 시뮬레이션 만들고 있는데 필요해서 만들어봄. 이진 트리하고 비슷하게 만들면 되는데 이진 트리보다 구분해야 하는 차원의 개수가 하나 늘어서 만들 때 꼬일 수 있음. 2021. 11. 7.
고속 푸리에 변환 이산 푸리에 변환 이산 푸리에 변환의 C++ 코드이다. #define M_PI 3.14159265358979323846 void DFT(const std::vector &input, std::vector > &output) { int N = input.size(); std::complex img(0.0, 1.0); for (int i = 0; i 1) { n = k; k >>= 1; phiT = phiT * phiT; T = 1.0L; for (int i = 0; i < k; ++i) { for (int a = i; a < N; a += n) { int b = a + k; std::complex t = x.at(a) - x.at(b); x.at(a) += x.at(b); x.at(b) = t * T; }.. 2021. 1. 28.
이산 푸리에 변환 푸리에 해석을 모른다면 슬쩍 보고 오자 푸리에 해석 테일러 급수를 아는 사람들은 알겠지만, 어떤 임의의 함수는 멱급수 형태로 전개할 수 있다. 그럼 반대로 생각해보자 어떤 임의의 주기함수는 사인함수의 합으로 이루어질 수 있는가? 어떤 함수 ellipsoid.tistory.com 이산 푸리에 변환의 C++ 코드이다. #define M_PI 3.14159265358979323846 void DFT(const std::vector &input, std::vector &output) { int N = input.size(); std::complex img(0.0, 1.0); for (int i = 0; i < N; ++i) { std::complex tmp(0.0, 0.0); for (int j = 0; j <.. 2021. 1. 28.
Github Gist 사용법 HTML편집 모드로 들어가서 이렇게 있으면오른쪽 상단의 Embed옆에 있는걸 복사해서(버튼 누르면 됨)티스토리의 HTML편집 모드로 들어가서 원하는 곳에 붙여넣기 하면 된다. 짧은 코드 남기기 좋다이렇게: 다크 모드 지원 안해주나? 2021. 1. 18.
C++ vector, list, queue 속도 실험 #include #include #include #include #include void vec_t(int size) { std::vector t; for (int i = 0; i < size; ++i) t.push_back(i); while (!t.empty()) t.erase(t.begin()); } void list_t(int size) { std::list t; for (int i = 0; i < size; ++i) t.push_back(i); while (!t.empty()) t.pop_front(); } void queue_t(int size) { std::queue t; for (int i = 0; i < size; ++i) t.push(i); while (!t.empty()) t.pop().. 2021. 1. 17.