반응형 STL/stl - cutting하기8 [파이썬] STL을 평면으로 자르기 #8. 속도개선 2초대로 줄임 pyvista 쓰던걸 numpy-stl 모듈로 바꿨다. 속도가 2초대로 줄었다. time5=[] for i in range(5): import timeit time_start = timeit.default_timer() # 시작 시간 체크 import os import numpy as np from stl import mesh from skspatial.objects import Plane from skspatial.objects import Point from skspatial.objects import Line #STL 가져오기 ctl = mesh.Mesh.from_file('python_stl\CAT.stl') #STL 불러오기 #교점 찾기 inter_point=np.zeros(3) #교점이 저장될.. 2022. 2. 8. [파이썬] STL을 평면으로 자르기 #7. 속도개선 4초대로 줄임 평면의 어느편에 있는지 판단하는걸 패키지 함수를 사용했었는데, 직접 계산하도록 수정했다. >>> time4 [4.5958613000002515, 4.686201099997561, 4.7097910000011325, 4.7155559999991965, 4.911541900000884] 4초대로 줄었다. 더 줄일 수 있을까. 2022. 2. 6. [파이썬] STL을 평면으로 자르기 #6. 시간 잡아먹는 부분 확인 else 문을 지워봤는데 시간차이가 별로 없다. 아마 else 문에 걸리는 점들이 몇개 없어서 그런 것 같다. if문 자체를 빼봤는데 시간차이가 없다. 뭐지...여기서 비교연산 등을 수행하는건 시간이 거의 들지 않는다는 말인가. 평면의 어느 쪽에 있는지 구하는 코드를 지웠더니 시간이 2초대로 줄어든다. 아래는 시간변화다. >>> time3_original [16.10053549999975, 13.224060499999723, 14.326108700000077, 16.356680699999743, 13.758388700000069] >>> time3 [2.8779554000002463, 2.8111312999999427, 2.914083199999368, 2.9338815999999497, 2.833796.. 2022. 2. 6. [파이썬] STL을 평면으로 자르기 #5. 속도개선 시도 (성공) if 문에서 계산 후 비교하는 것을 그냥 비교하는걸로 바꿨다. 시간이 약간 줄었다. >>> time2 [13.642363099999997, 11.509126199999997, 13.2013338, 17.86278129999998, 12.619769899999994] >>> time3 [10.019133699999998, 10.265788899999961, 10.640305100000091, 11.123026500000037, 11.977286100000015] 2022. 2. 6. [파이썬] STL을 평면으로 자르기 #4. 속도개선 시도 왼쪽 코드를 오른쪽과 같이 바꿨다. 평면 어느 쪽에 있는지 여부를 계산하는 것을 처음에만 하고 변수에 넣었다. 시간이 오히려 늘었다. 큰 의미없는 차이다. >>> time [16.898227600000155, 17.11739409999973, 16.90786509999998, 16.87015599999995, 17.234067800000048] >>> time2 [17.96122940000032, 16.95500889999994, 17.137785200000053, 17.103367199999866, 17.54229200000009] 2022. 2. 5. [파이썬] STL을 평면으로 자르기 #3. 속도개선 (20초 근처로 단축) 코드 실행속도를 개선하기 위해 for 문을 아래와 같이 수정해보았다. for i in range(ctl.n_cells-1): #교점을 찾는 for문 p1=ctl.cell_points(i)[0] p2=ctl.cell_points(i)[1] p3=ctl.cell_points(i)[2] if (pl.side_point(p1)+pl.side_point(p2))*pl.side_point(p3)==2 : pass else : if pl.side_point(p1)*pl.side_point(p2)==-1 : inter_point=np.vstack((inter_point,pl.intersect_line(Line.from_points(p1,p2)))) if pl.side_point(p1)*pl.side_point(p3)=.. 2022. 2. 5. [파이썬] 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. [파이썬] 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. 이전 1 다음 반응형