11. STL 불러와서 평면과 교점구하기
5강에서 만들었던 hammer_remesh.stl을 불러와서 평면으로 자른 교점을 구해봅시다.
mystl=stlread('hammer_remesh.stl');
10강에서 만든 코드를 그대로 적용해줍니다.
#한 face를 구성하는 점들을 같은 행에 저장
vertices_by_f=0;
for i=1:size(mystl.faces)(1)
for j=1:3
a=mystl.faces(i,j);
vertices_by_f(i,(3*j-2):3*j)=mystl.vertices(a,:);
end
end
#평면의 방정식 2x+3y-z=0
PL=[2 3 -1 0];
#평면과 모서리 사이의 교점 구하기
for i=1:size(mystl.faces)(1)
p1=vertices_by_f(i,1:3);
p2=vertices_by_f(i,4:6);
p3=vertices_by_f(i,7:9);
interpoint(3*i-2,1:3)=plpointersec2(PL,p1,p2);
interpoint(3*i-1,1:3)=plpointersec2(PL,p1,p3);
interpoint(3*i,1:3)=plpointersec2(PL,p2,p3);
end
#NA 제거 defined by me
interpoint_2=removeNA(interpoint);
#겹치는 부분 제거
interpoint_3=unique(interpoint,'rows');
#stl 그리기
patch('Faces',mystl.faces,...
'Vertices',mystl.vertices,...
'FaceColor',[0.2 0.5 0.7]);
view(-45,45);
#axis([-1 3 -1 3 -1 3])
box on;
xlabel('x')
ylabel('y')
zlabel('z')
hold on
#평면 그리기
[x y] = meshgrid(-0.5:0.1:0.5);
z = 2.*x + 3.*y +0;
surf(x,y,z);
#interpoint 그리기
hold on
marker_size=repelem(50,size(interpoint_3)(1));
marker_col=repelem(3,size(interpoint_3)(1));
scatter3(interpoint_3(:,1),interpoint_3(:,2),interpoint_3(:,3),marker_size,marker_col,'filled');
교점이 잘 구해진 것을 알 수 있습니다.
'MATLAB 코딩 > STL파일 다루기' 카테고리의 다른 글
[Matlab으로 STL파일 다루기] 12. STL과 평면 사이의 교점을 구하는 함수 정의 (0) | 2020.01.14 |
---|---|
[Matlab으로 STL파일 다루기] 10. STL과 평면의 교점구하기 (2) | 2020.01.07 |
[Matlab으로 STL파일 다루기] 9. 평면으로 STL 자른 단면 만들기 (2) 두 점과 평면의 교점을 구하는 함수 (0) | 2019.12.06 |
[Matlab으로 STL파일 다루기] 8. 평면으로 STL 자른 단면 만들기 (1) 예제 설명 (0) | 2019.12.06 |
[Matlab으로 STL파일 다루기] 7. 간단한 STL 직접 만들어보기 (0) | 2019.11.06 |
댓글