10. STL과 평면의 교점구하기
7강에서 만들었던 stl을 가져옵시다.
a1=[1 0 0];
a2=[1 1 0];
a3=[0 1 0];
a4=[0 0 0];
a5=[1 0 1];
a6=[1 1 1];
a7=[0 1 1];
a8=[0 0 1];
mystl.vertices=[
%아랫면
a1;a2;a3;
a1;a3;a4;
%윗면
a5;a6;a7;
a5;a7;a8
%앞면
a1;a2;a5;
a5;a2;a6;
%뒷면
a4;a3;a7;
a4;a7;a8;
%좌측면
a1;a5;a4;
a5;a4;a8;
%우측면
a2;a3;a6;
a6;a3;a7;
];
mystl.faces=[1 2 3;
4 5 6;
7 8 9;
10 11 12;
13 14 15;
16 17 18;
19 20 21;
22 23 24;
25 26 27;
28 29 30;
31 32 33;
34 35 36;
];
하나의 face를 구성하는 점이 3개인데요. 이 세개의 점을 하나의 행에 저장하겠습니다. 예를들어서 face1을 구성하는 점이 [1 0 0] [0 1 0] [0 0 0]이라면 아래와 같이 저장되는 것입니다.
[1 0 0 0 1 0 0 0 0]
#한 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
이번에는 평면을 정의하고 face의 세 모서리들과의 교졈을 구합시다.
#평면의 방정식 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로 표시됩니다.
#NA 제거 defined by me
interpoint_2=removeNA(interpoint);
두 face가 모서리를 공유하기 때문에, 모서리가 중복으로 입력되었기 때문에 겹치는 부
분을 제거해줍니다.
#겹치는 부분 제거
interpoint_3=unique(interpoint,'rows');
그래프로 그려서 point가 잘 찾아졌는지 확인합니다.
#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파일 다루기] 11. STL 불러와서 평면과 교점구하기 (0) | 2020.01.08 |
[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 |
댓글