Create a matrix [3xm] with the elements of a matrix [3,n] in the order given by vector k[m]

조회 수: 2 (최근 30일)
Hello,
My brain is going to explode. I think the solution is easy, but I seem to not get it. I hope my explaination is good enough. The files are attached and my code is down bellow.
I have 2 STL files, which I convert to points. For each tooth I get a matrix with three rows and different number of rows, m and n. I use the function
[k,dist] = dsearchn()
to get the nearest point from tooth 1 to 2.
  • k is a vector with the elements of matrix 1 which contains the nearest point. So if the first element of k is e.g. 5843 that means that the nearest point in Matrix 1 of the first point in Matrix 2 is the point described in the 5843 element of Matrix 1.
  • dist is just the distances between the points.
Now I would like to plot the distance line between said points and here my brain gets knotted. MATLAB will not plot it because the m and n are different.
My code is this:
Input1 = 'F.O. - 6 left up_centerd_rotated.stl';
Input2 = 'L.O. - 6 left up_centerd_rotated.stl';
FV1 = stlread(Input1); % Get the Values of F, V and N
FV2 = stlread(Input2); % Get the Values of F, V and N
FV1Unique = unique(FV1.vertices,'rows');
FV2Unique = unique(FV2.vertices,'rows');
[k,dist] = dsearchn(FV1Unique,FV2Unique);
subplot(1,2,1)
plot3(FV1Unique(:,1),FV1Unique(:,2), FV1Unique(:,3),'ko')
hold on
plot3(FV2Unique(:,1),FV2Unique(:,2),FV2Unique(:,3),'*g')
hold on
plot3(FV1Unique(k,1),FV1Unique(k,2), FV1Unique(k,3),'*r')
legend('Data Points','Query Points','Nearest Points','Location','sw')
subplot(1,2,2)
plot3([FV2Unique(:,1),FV1Unique(k,1)],[FV2Unique(:,2),FV1Unique(k,2)],[FV2Unique(:,3),FV1Unique(k,3)]); %This is my best try
The last line is my best try. It does work, but the lines drawn are not correct so I must have made a mistake (probably in the last line).
If this doesn't work, I thought of creating a vector of the size m (as k) and taking the values of FV1Unique as given by k and then plotting, but I fail to create the vector.
Thank you for taking the time.

채택된 답변

Bruno Luong
Bruno Luong 2020년 8월 26일
편집: Bruno Luong 2020년 8월 26일
plot3(...
[FV2Unique(:,1),FV1Unique(k,1)]',...
[FV2Unique(:,2),FV1Unique(k,2)]',...
[FV2Unique(:,3),FV1Unique(k,3)]');
  댓글 수: 3
Bruno Luong
Bruno Luong 2020년 8월 26일
편집: Bruno Luong 2020년 8월 26일
Separate the lines is just an esthetic change.
The transposition ' is what makes the difference. When you call PLOT, PLOT3 with array input, the lines connect along the first dimension, and there are as many lines as the columns, in your case FV2Unique to the closest FV1Unique.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Data Distribution Plots에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by