본문 바로가기
반응형

분류 전체보기84

벡터 계산과 단위벡터 벡터(Vector)벡터는 어릴 때 학교에서 크기와 방향을 가진 물리량이라고 배웠습니다. 벡터 계산은 두 점 p1(x1, y1), p2(x2, y2)가 있을 때 벡터 방향이 p1으로 향한다고 한다면 벡터 계산은 v = p1-p2로 합니다. 계산된 벡터 v는 크기와 방향을 갖게 됩니다.  벡터 v는 원점(0,0)으로부터 v(x, y)까지 향하는 직선으로 표시할 수 있습니다. 이 직선의 길이가 벡터 v의 크기라고 말할 수 있습니다. 벡터 크기 계산은 √ (x-0)²+(y-0)² 이고 두 점의 길이 계산식과 같습니다. 3차원도 z를 추가해서 같은 방식으로 벡터 크기를 계산 할 수 있습니다. 단위벡터(Unit Vector)단위벡터는 벡터 크기 혹은 길이가 1인 벡터입니다. 벡터의 크기를 1로 변환하는 작업을 정규.. 2024. 9. 11.
3차원 두 직선 교차점(Two Line Intersection) 3차원에서 두 직선 교차점을 찾는 방법 2가지를 소개하겠습니다.1. 첫 번째 행렬식을 이용한 교차점 계산입니다. 점 4개 p1, p2, p3, p4가 있고 직선의 두 벡터 d1(p2-p1), d2(p4-p3)가 있을 때(두 벡터는 길이 1로 정규화)직선 1 : p1+td1 직선 2:  p3+sd2 로 볼 수 있으며, 교차점 있다는 것은  p1+td1 = p3+sd2 이 식으로 표현이 가능합니다. 이때 t와 s를 구하면 됩니다.직선 식 참고는 아래글에서 확인하세요.2024.04.24 - [3D Algorithm] - 3차원 직선 계산 및 벡터 표현(개발자 관점) 3차원 직선 계산 및 벡터 표현(개발자 관점)어렸을 때 배웠던 2차원 직선의 방정식은 y = ax+b 선언하여, 두 점을 이 식에 대입한 후 미지.. 2024. 9. 10.
Morton Code 모턴 코드(Morton Code)는 3차원 또는 고차원 좌표 데이터를 1차원으로 변환하여 효율적으로 관리하기 위한 방법입니다. 이를 Z-order curve라고도 부르며, 공간 분할에서 자주 사용됩니다. Morton Code는 각 좌표의 비트를 교차(interleave)하여 1차원으로 배열합니다.각 차원의 좌표 값에서 비트를 하나씩 순서대로 꺼내어 합칩니다. 예를 들어, 3D 좌표 (x, y, z)라면, 각 차원의 비트를 교차하여 하나의 값으로 결합합니다.#include #include using namespace std;// method to seperate bits from a given integer 3 positions apartinline uint64_t splitBy3(unsigned int .. 2024. 9. 4.
CAD Revolve CAD(Computer Aided Design) 소프트웨어에는Revolve, Loft, Extrude 등 여러 가지 기능이 있습니다.이 중 Revolve는 예전 학사 때 CAD 소프트웨어를 사용하면서 제가 자주 이용했던 기능이었고 ㅎㅎ, 마침 제가 일하는 곳에서 Revolve 기능이 필요해서 이번에 한번 구현해 봤습니다. Revolve는 회전이라는 의미로 아래와 같이 중심축과 curve가 주어지면 curve를 360도 회전시켜서 3차원 모델을 생성하는 기능입니다. 기본적으로 회전 각도는 360도 회전으로 전체 형상을 생성하지만, 필요한 경우 특정 각도로 회전시켜 원하는 부분만 모델링할 때도 있습니다. 제가 구현한 것은 임의의 stl 파일이 입력으로 들어오면, stl 형상의 외곽선을 따내어 그 외곽선을 3.. 2024. 9. 3.
AABB(Axis Aligned Bounding Box) 계산과 활용 AABB가 무엇인지는 아래글을 통해서 간단히 설명했었습니다.2023.12.11 - [3D Algorithm] - AABB OBB 차이와 의미 AABB OBB 차이와 의미AABB(Axis Aligned Bounding Box)와 OBB(Oriented Bounding Box)는 모두 3D 그래픽스 및 게임 프로그래밍 분야에서 주로 사용되는 Bounding Box 계산 기법입니다. AABB는 축에 정렬된 바운딩 박스로, 3축 x(1,0,0), y(0,1,0),darkrock.tistory.com AABB 계산은 object를 구성하는 점들을 순회하면서 x축, y축, z축의 최대최소를 구하면 됩니다. 아래와 같이 AABB가 계산되면 최소점은 (0,0,0)이고 최대점은(10,10,10)이 됩니다.  이처럼 bo.. 2024. 8. 22.
폴더 내 파일명 추출 명령 프롬프트(Command Prompt, cmd.exe)를 이용한 폴더 내 파일명 추출윈도우 검색창에 cmd를 눌러 콘솔창에서 cd 명령어를 이용해 원하는 폴더로 이동이 가능하지만,윈도우 탐색기에 추출하고자 하는 폴더로 가서 cmd를 치시면 바로 그 폴더에 콘솔창이 뜨게 됩니다.콘솔창에서 dir /b > file.txt 입력하시면 현재 폴더 내에 있는 파일명을 텍스트 파일로 저장할 수 있습니다. 특정 확장자 파일명을 저장할 때는 dir /b *.txt > file.txt 로 저장하시면 확장자가 txt 파일만 저장하실 수 있습니다.* 이 표시는 모든 것이라고 보시면 됩니다. *.txt는 모든 파일 중에 확장자가 txt란 의미로 볼 수 있고, test.*는 text 파일명의 모든 확장자라고 이해하시면 됩니다. 2024. 6. 18.
임의의 점 직육면체 외부/내부 판별(Point Inside Cube) 원기둥 내부의 점 판별 코드는 아래글에서 설명했습니다. 2024.06.03 - [3D Algorithm] - 임의의 점 원기둥 내부/외부 판별 코드(c++) 임의의 점 원기둥 내부/외부 판별 코드(c++)* 아래 코드는 임의의 점이 cylinder 내부/외부에 있는지 판별하는 코드입니다. * 입력변수 설명 -  pt1: 원기둥 하단 중심점 -  pt2: 원기둥 상단 중심점 -  len: 원기둥 높이 -  radius: 원기둥 반darkrock.tistory.comCube 내부판별은 Cube가 AABB와 같이 축에 정렬이 되어 있다면 x, y, z의 min, max로 외부/내부 판별 할 수 있겠지만, OBB같이 축에 정렬이 되어 있지 않으면 내적을 이용한 정사영으로 외부/내부 판별 할 수 있습니다. AAB.. 2024. 6. 13.
PLY File Format(포맷 정보) 이전글에 stl과 obj 파일 기본정보에 대해 글을 작성 했었습니다.2023.10.23 - [3D Algorithm] - stl, obj 3D 파일 포맷 기본 정보(3D File Format) stl, obj 3D 파일 포멧 기본 정보(3D File Format)3D 파일로 주로 쓰이는 stl과 obj 파일 포맷의 기본적인 geometry 정보(에니메이션, 텍스쳐, 포인트 색상정보 제외)를 알려드리겠습니다. 이 두 파일 뿐만 아니라 대부분의 3D 파일(volume이 아닌 surface ddarkrock.tistory.com PLY 파일도 stl, obj와 같이 3d data를 저장하는 데이터 포맷입니다.PLY는 크게 두 가지 Header와 Data로 나누어서 저장합니다. * Header - 헤더 시작은 .. 2024. 6. 6.
임의의 점 원기둥 내부/외부 판별 코드(c++) * 아래 코드는 임의의 점이 cylinder 내부/외부에 있는지 판별하는 코드입니다. * 입력변수 설명 -  pt1: 원기둥 하단 중심점 -  pt2: 원기둥 상단 중심점 -  len: 원기둥 높이 -  radius: 원기둥 반지름: -  pnt: 내부/외부 판별을 위한 임의의 점struct Point{ float x; float y; float z;};bool checkInsideCylinder(Point pt1, Point pt2, float len, float radius, Point pnt){ float length_sq = len * len; float radius_sq = radius * radius; float dx, dy, dz; float pdx, pdy, pdz; float do.. 2024. 6. 3.
반응형