기본 콘텐츠로 건너뛰기

라벨이 VTK인 게시물 표시

Networkx 라이브러리 활용법

  Networkx 라는 그래프에 관련된 훌륭한 라이브러리가 있습니다. 이 라이브러리에 관련된 여러 글들을 인터넷에서 찾아보고 지금 진행하고 있는 Cable Auto Routing에 적용할 수 있다는 것을 알게되었습니다. Cable Auto Routing은 두 장치를 연결하는 Cable의 최단 경로를 자동으로 찾는 것입니다. Networkx 의 shortest_path라는 함수를 이용하여 출발 노드에서 종료 노드에 도달하는 최단 경로를 구할 수 있습니다. $$path = \text{nx.dijkstra_path}(G, \text{start_node}, \text{end_node}, weight)$$ 아마 shortest_path 함수도 내부적으로 dijkstra 알고리즘을 사용할 것 같습니다. Cable Auto Routing 프로젝트에서 dijkstra 알고리즘을 직접 구현하여 문제를 해결할 수도 있겠지만 이미 검증된 라이브러리를 사용하는 편이 훨씬 효율적이고(알고리즘 구현에 시간을 낭비할 필요가 없습니다.) 안전할것 입니다. 이 라이브러리를 Cable Auto Routing에 적용하기 전에 기능 테스트를 위한 데모 프로그램을 작성하기로 하였습니다.  데모 프로그램은 아래와 같은 기능을 가집니다. 최단 거리 검색 노드 생성 에지 생성 노드, 에지 정보를 파일로 저장 및 저장된 파일 읽어오기 Open 툴바를 눌러 노드와 에지 정보가 저장된 Json 파일을 읽습니다. Networkx 툴바를 누르면 Networkx 관련 다이얼로그가 나타납니다. Find 버튼을 눌러 사용자가 입력한 출발 노드에서 종료 노드까지의 최단 경로를 검색합니다. 결과 화면(노란색이 최단 경로) 노드를 생성할때 노드 이름과 3D 좌표를 입력합니다. 사실 Networkx에서는 3D 좌표는 필요없습니다. 데모 프로그램에서 3D로 노드를 표시해주기 위해 3D 좌표를 입력하도록 하였습니다. 에지는 에지를 구성하는 두 노드 이름과 에지의 길이를 입력하도록 하였습니다. 에지의 길이는 에...

[VTK] Surface of Revolution

  VTK 에는 내가 원하는 Surface of Revolution API가 없습니다. vtkRotationalExtrusionFilter라는 클래스가 있지만 원하는 결과를 만들어 주지 않았습니다. 그렇게 원하는 API를 찾아봤는데 찾지 못했기 때문에 그 기능을 직접 구현하기로 했습니다. 먼저 회전시킬 곡선(Profile)을 생성합니다. Profile을 회전 축을 기준으로 Resolution만큼 회전시키면서 곡선들을 만들어 냅니다. # create a profile circle = vtk. vtkRegularPolygonSource ( ) circle. SetCenter ( ( pt1 [ 0 ] - self ._origin [ 0 ] , pt1 [ 1 ] - self ._origin [ 1 ] , pt1 [ 2 ] - self ._origin [ 2 ] ) ) circle. SetNormal ( ( pt1 [ 0 ] - center [ 0 ] , pt1 [ 1 ] - center [ 1 ] , pt1 [ 2 ] - center [ 2 ] ) ) circle. SetRadius ( radius ) circle. SetNumberOfSides ( 24 ) circle. Update ( ) circle_points = circle. GetOutput ( ) . GetPoints ( ) # get points from profile del circle   # Setup points and lines points = vtk. vtkPoints ( ) points. Allocate ( ( self ._resolution + 1 ) * circle_points. GetNumberOfPoints ( ) ) faces = vtk. vtkCellArray ( ) faces. SetNumberOfCells ( self ._resolution * circle_points. GetNumberOfPoints ( ) ) lines = v...