본문 바로가기
MATLAB 코딩/STL파일 다루기

[Matlab으로 STL파일 다루기] 11. STL 불러와서 평면과 교점구하기

by bigpicture 2020. 1. 8.
반응형

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');


교점이 잘 구해진 것을 알 수 있습니다. 


반응형

댓글