본문 바로가기
반응형

전체 글128

[파이썬] STL을 평면으로 자르기 #2. 코드 실행 시간 계산하기 생각보다 실행시간이 너무 오래걸려서 코드를 개선하며 시간을 단축시키려고 한다. 시간이 단축되는지 알려면 먼저 코드 실행시간을 측정해야한다. timeit 패키지를 사용한다. 시작한 시각을 측정하고, 종료 시각을 측정해서 그 차이를 구하면 소요시간이다. 아래와 같이 코드 맨 앞과 뒤에 입력하면 된다. import timeit time_start = timeit.default_timer() # 시작 시각 체크 import os import numpy as np import pyvista as pv from skspatial.objects import Plane from skspatial.objects import Point from skspatial.objects import Line #코드 실행시간 확인 #.. 2022. 2. 5.
[파이썬] 3차원 공간에 라벨 표시하기 (pyvista) 3차원 공간에 라벨을 표시하는 방법은 아래와 같습니다. 다양한 옵션 적용이 가능합니다. import pyvista as pv #라벨 위치 정의 x_label=pv.PolyData([0,0,0]) y_label=pv.PolyData([0,10,0]) z_label=pv.PolyData([0,20,0]) # 캔버스 정의 p = pv.Plotter() #라벨 그리기 p.add_point_labels(x_label, ["x"],point_color='yellow',text_color='red', point_size=20, font_size=40,render_points_as_spheres=True,always_visible=True,show_points=False) p.add_point_labels(y_labe.. 2022. 1. 18.
[파이썬] 3차원에 선 그리기 (pyvista) 3차원 공간에 선을 그리는 방법은 아래와 같습니다. import pyvista as pv #선 정의 x_axis=pv.Line((0,0,0),(150,0,0)) y_axis=pv.Line((0,0,0),(0,150,0)) z_axis=pv.Line((0,0,0),(0,0,150)) # 캔버스 정의 p = pv.Plotter() # 선 그리기 p.add_mesh(x_axis,color='yellow') p.add_mesh(y_axis,color='yellow') p.add_mesh(z_axis,color='yellow') #그래프 보이기 p.show() 2022. 1. 18.
[파이썬] 점 3차원 그래프 그리고 크기,색 설정 (pyvista) 넘파이를 이용하여 점을 생성합니다. import numpy as np import pyvista as pv point = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, -1]]) 그래프를 그려봅시다. p = pv.Plotter() # 캔버스 정의 p.add_mesh(point) p.show() 설정할 수 있는 옵션은 아래와 같습니다. add_mesh(self, mesh, color=None, style=None, scalars=None, clim=None, show_edges=None, edge_color=None, point_size=5.0, line_width=None, opacity=1.0, flip_scalars=False, l.. 2021. 11. 8.
파이썬 pyvista 모듈에서 stl 병진,회전,변환(translate, rotate, transform) 넘파이와, pyvista 모듈을 불러옵니다. import numpy as np import pyvista as pv mesh 하나를 정의합시다. import numpy as np import pyvista as pv # mesh points vertices = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, -1]]) # mesh faces faces = np.hstack([[4, 0, 1, 2, 3], # square [3, 0, 1, 4], # triangle [3, 1, 2, 4]]) # triangle mesh = pv.PolyData(vertices, faces) 병진,회전,변환 메소드는 아래와 같이 사용합니다. STL.tran.. 2021. 11. 8.
파이썬 numpy stl 모듈에서 stl 병진,회전,변환(translate, rotate, transform) 넘파이와, stl 모듈을 불러옵니다. import numpy as np from stl import mesh mesh를 하나 불러와서 STL이라는 변수에 입력했다고 가정합시다 . STL=mesh.Mesh.from_file('ex.stl') 병진,회전,변환 메소드는 아래와 같이 사용합니다. STL.translate(np.array([x,y,z])) STL.rotate(axis, theta=0, point=None) STL.transform(matrix) ; 4x4 행렬 2021. 11. 8.
pyvista 자료형인 PolyData 에서 사용가능한 메소드들 pyvista에서 stl을 생성하거나, point cloud를 생성하거나, stl 을 불러올 때 사용하는 메소드는 pv.PolyData 입니다. PolyData에서 사용가능한 메소드들을 살펴봅시다. 먼저 PolyData 를 하나 생성하였습니다. import numpy as np import pyvista as pv # mesh points vertices = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, -1]]) # mesh faces faces = np.hstack([[4, 0, 1, 2, 3], # square [3, 0, 1, 4], # triangle [3, 1, 2, 4]]) # triangle mesh = pv.PolyDa.. 2021. 11. 8.
pyvista 매쉬 생성 원리 pyvista에서는 아래 형식으로 매쉬를 생성합니다. import pyvista as pv mesh = pv.PolyData(vertices, faces) vertices는 매쉬 생성에 사용되는 점이고, faces는 면에 대한 정보입니다. 아래는 pyvista documentation 에서 제공하는 예시입니다. import numpy as np import pyvista as pv # mesh points vertices = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, -1]]) # mesh faces (일렬로 나열한 것과 같음) faces = np.hstack([[4, 0, 1, 2, 3], # square [3, 0, 1, 4],.. 2021. 11. 8.
[파이썬] STL을 평면으로 자르기 #1. 교점구하기 STL과 내가 지정한 평면 사이의 교점을 얻는 코드를 짜보았다. 고양이 모델을 사용했다. 먼저 사용한 고양이 모델을 공유한다. 평면을 하나 만들고 교점을 구했다. 평면은 skspatial 패키지를 사용했다. STL을 불러와 교점을 구하는데는 numpy-stl 패키지를 사용했고, 시각화에는 pyvista 패키지를 사용했다. 평면,선 등 정의 및 계산 : skspatial 패키지 STL 불러와 계산 : numpy-stl 패키지 시각화 : pyvista 패키지 결과는 아래와 같다. 코드는 아래와 같다. 설명은 주석에 써놓았다. import os import numpy as np import pyvista as pv from skspatial.objects import Plane from skspatial.ob.. 2021. 10. 26.
[파이썬] STL 3차원 그래프 그리기 (pyvista) STL 파일을 불러와서 3차원에 시각화하려고 하는데 matplotlib 로 그리니까 너무 느리다. 심각하게 느려서 View 변경하는게 거의 불가능한 정도였다. 다른 방법을 찾던 중 pyvista 라는 패키지를 알게 되었다. 매쉬 데이터의 3차원 시각화가 목적인 패키지다. 써봤는데 엄청빠르다. 아래와 같은 형식으로 사용한다. pv.read 를 이용하여 stl을 불러오고 Plotter 함수를 이용하여 그려준다. import os import pyvista as pv path="C:/Users/python_stl" os.chdir(path) cat = pv.read('cat.stl') # Create a plot p = pv.Plotter() # 캔버스 정의 p.add_mesh(cat, opacity=1, c.. 2021. 10. 26.
[파이썬] OpenGL 설치방법 설치 커멘드 창을 엽니다. 시작메뉴를 클릭하고 cmd를 입력하면 나오는 '명령 프롬프트'를 실행하면 됩니다. 아래 명령어를 입력합니다. 명령어를 하나씩 입력합니다. pip install PyOpenGL pip install PyOpenGL_accelerate 또는 아래와 같이 한번에 입력할 수도 있습니다. pip install PyOpenGL PyOpenGL_accelerate 설치 확인 커멘드창에 아래 명령어를 입력하면 설치된 패키지 목록을 보여줍니다. pip list 목록에 위에서 설치한 두 패키지 이름이 있으면 성공입니다. 2021. 10. 25.
RGB는 알겠는데 RGBA는 무엇인가 RGB는 Red Green Blue 의 약어입니다. 빨강, 초록, 파랑은 삼원색입니다. 세가지 색을 혼합하면 모든 색을 만들 수 있습니다. 셋중 둘을 혼합하여 나머지 하나를 만드는 것은 불가능합니다. 세 색은 서로 '독립'입니다. 세 색을 얼마나 섞을 것인가를 0~1사이 숫자로 나타냅니다. 예를들어 (1,0,0) 은 빨강입니다. (0,1,0)은 초록입니다. (0.5,0.5,0)은 빨강과 초록을 반씩 섞는 것을 의미합니다. (0.5,0.5,0.1)은 빨강,초록,파랑을 5:5:1 로 섞는 것입니다. 0~1이 아니라 0~100사이의 숫자로 나타내기도 합니다. 여기에 투명도 개념을 추가할 수 있습니다. RGB로 나타낸 색의 투명도를 $\alpha$로 나타내고 $\alpha$가 0이면 완전 투명, 1이면 완전 불.. 2021. 10. 25.
8비트, 16비트, 24비트 컬러의 의미 (resolution 과 precision) 이미지의 퀄리티는 두가지로 결정됩니다. - resolution - precision resolution 은 raster에 포함된 픽셀 수 입니다. 동일 면적이라면 픽셀이 많은 수록 해상도가 높습니다. 반면 precision 은 한 픽셀이 같는 비트 수 입니다. 비트 수는 곧 표현할 수 있는 색의 종류를 말합니다. 8비트라면 $2^{8}$인 256색을 표현할 수 있습니다. 16비트와 24비트가 표현할 수 있는 색의 수는 아래와 같습니다. $2^{16}=65536$ $2^{24}=16777216$ 16비트를 high color, 24비트를 true color 라고도 부릅니다. 2021. 10. 25.
[파이썬] 두 점 사이에 평면이 있는지 여부 구하기 (scikit-spatial) 먼저 패키지를 불러옵시다. import numpy as np from skspatial.objects import Plane from skspatial.objects import Point 점 두개와 평면 하나를 정의합시다. >>> p1=Point([0,0,1]) >>> p2=Point([0,0,3]) >>> pl=Plane([0,0,2],[0,0,1]) Plane 클래스의 side_point 메소드를 사용하면 점이 평면의 어느 쪽에 있는지를 알 수 있습니다. 반환하는 값은 아래와 같습니다. 점이 평면 위에 : 0 점이 평면 앞에 : 1 점이 평면 뒤에 : -1 두 점을 이용하여 반환값을 구해봅시다. >>> pl.side_point(p1) -1 >>> pl.side_point(p2) 1 값이 다르므로 서.. 2021. 10. 22.
[파이썬] 직선과 평면의 교점 구하기 (scikit-spatial) 먼저 패키지를 불러옵시다. import numpy as np from skspatial.objects import Plane from skspatial.objects import Line 선 하나와 평면 하나를 정의합시다. >>> line = Line([1, 1, 0], [2, 1, 3]) >>> plane = Plane(point=[2, 2, 5], normal=[0, 0, 1]) 교점을 구해봅시다. >>> plane.intersect_line(line) Point([4.33333333, 2.66666667, 5. ]) 2021. 10. 22.
반응형