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 Center および File ExchangeAxis Labels についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by