Error in array bounds

조회 수: 1 (최근 30일)
Midlij
Midlij 2021년 10월 13일
댓글: DGM 2021년 10월 13일
clc; clear all; close all;
load('bunny.mat')
%% Visualize PC
figure;
scatter3(P(1,:), P(2,:), P(3,:),10,Color,'filled');
xlabel('x axis');
ylabel('y axis');
zlabel('z axis');
%% Problem 1:
title('bunny1');
saveas(gcf, "bunny1");
for sx=0.01:5
P = [];
s = [sx, 0, 0;
0, sx, 0;
0, 0, sx];
for i = 1:2396
pi = P(:,i);
spi = s * pi;
P = [SP,spi];
end
figure;
scatter3(P(1,:), P(2,:), P(3,:),10,Color,'filled');
xlabel('x axis');
ylabel('y axis');
zlabel('z axis');
end
Below is not part of the code
*color is 1x2396 and P is 3x2396
Why do I get the error "Index in position 2 exceeds array bounds.
Error in script (line 23)
pi = P(:,i);"? and how do I fix it?

답변 (2개)

Walter Roberson
Walter Roberson 2021년 10월 13일
"P is 3x2396"
No it is not. You assign [] to P.
  댓글 수: 1
Midlij
Midlij 2021년 10월 13일
let's suppose that it is 3x2396. How do I fix the error?

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


DGM
DGM 2021년 10월 13일
편집: DGM 2021년 10월 13일
% ...
% this loop has been simplified to the point that it works
% for sx = 0.01:5
% s = [sx, 0, 0;
% 0, sx, 0;
% 0, 0, sx];
%
% for k = 1:size(P,2)
% P(:,k) = s * P(:,k);
% end
% end
% but it's needlessly roundabout, because it simplifies to
P = P*4.01;
% which is probably not what you want, but you haven't described that.
scatter3(P(1,:), P(2,:), P(3,:),10,Color,'filled');
xlabel('x axis');
ylabel('y axis');
zlabel('z axis');
  댓글 수: 2
Midlij
Midlij 2021년 10월 13일
I tried the code, but it is not providing me with the required values when the figures are displayed. What could have gone wrong?
DGM
DGM 2021년 10월 13일
Nobody knows, because nobody else knows what the required values are.
The only information you provided was nonfunctioning code which appears to do what I demonstrated. You're multiplying each point by the identity matrix (multiplied by a scalar sx). As the name "identity matrix" implies, the result is the point itself multiplied by sx. Since the results are overwritten each time the loop iterates, the result is P multiplied by the last value of sx, which is 4.01. You could plot the points each time...
% ...
for sx = 0.01:5
Ps = P*sx;
scatter3(Ps(1,:), Ps(2,:), Ps(3,:),10,Color,'filled'); hold on
end
xlabel('x axis');
ylabel('y axis');
zlabel('z axis');
If the code is supposed to do something else, then you'll have to clearly describe what that is.

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

카테고리

Help CenterFile Exchange에서 Axis Labels에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by