- What line throws the error?
- What sizes are sph1 and sph2 when it occurs?
Why do I get Error: Subscript indices real positive integers/logicals?
4 views (last 30 days)
Show older comments
I have a function that calculates the gap/overlap between two spheres. The spheres can have either the format [x,y,z,r] or [x;y;z;r], so I included some code at the beginning to bring them both to the same format. The rest is a rather simple distance calculation.
This worked fine up to now, no matter which of the two input formats I used for input. However, for some reason this has stopped working (at all, no matter which format i use) and I keep getting the message "Subscript indices must either be real positive integers or logicals."
Here is my code:
function [ distance ] = distcheck( sph1, sph2 )
%DISTCHECK calculates ->real<- distance between spheres (gap+ or overlap-)
[size11, size12] = size(sph1);
if size11 == 4;
sph1 = sph1.';
end
[size21, size22] = size(sph2);
if size21 == 4;
sph2 = sph2.';
end
distsq = sum( (sph2(1:3)-sph1(1:3)).^2) - (sph1(4) + sph2(4))^2;
if distsq < 0;
distdir = -1;
else
distdir = 1;
end
distance = distdir*sqrt(abs(distsq));
end
example spheres (so you can run it easily):
% example 1:
sph1 = [-0.2357;0.3639;0.3399;0.250];
sph2 = [-0.1611,0.1500,0.0420,0.01500];
% example 2:
sph1 = [-0.2357;0.3639;0.3399;0.250];
sph2 = [-0.1611;0.1500;0.0420;0.01500];
% example 3:
sph1 = [-0.2357,0.3639,0.3399,0.250];
sph2 = [-0.1611;0.1500;0.0420;0.01500];
% example 4:
sph1 = [1,1,1,1]; sph2 = [1,1,2.5,1];
% example 5:
sph1 = [1;1;1;1]; sph2 = [1;1;2.5;1];
% example 6:
sph1 = [1,1,1,1]; sph2 = [1;1;2.5;1];
No matter which of them I use, I get the error. If I copy-paste each step from the function and run it manually, I get a valid result. What am I missing?
Edit: Whole error message and iputs causing them:
>> sph1 = [-0.2357;0.3639;0.3399;0.250];
sph2 = [-0.1611,0.1500,0.0420,0.01500];
>> distcheck(sph1,sph2)
Subscript indices must
either be real positive
integers or logicals.
Edit2: It seems to work when I clean up my workspace but my main script keeps triggering the error message.
Subscript indices must either be real
positive integers or logicals.
Error in testscript (line
116)
distn2 =
distcheck(sphn,cont2);
with
sphn = [-3.065361088086432e-06;5.050735062465379e-05;1.250955109092040e-05;2.500000000000000e-05];
cont2 = [-1.081620971550675e-06 1.500000000000000e-05 1.797244470458586e-05 1.500000000000000e-05];
Edit3: Found the problem, I somehow created a variable called "distcheck" (same as the function name).
2 Comments
Star Strider
on 11 May 2014
BTW, you can do away with your first two if blocks. If you want sph1 and sph2 to be row vectors, simply state them as:
sph1 = sph1(:)';
sph2 = sph2(:)';
Accepted Answer
Image Analyst
on 11 May 2014
Post your exact error message - you forgot to do so, you just snipped out a small chunk of it. I ran your code in the attached file, and it ran fine with no errors whatsoever . Moreover, I don't see anything that should cause such an error.
2 Comments
More Answers (0)
See Also
Categories
Find more on Whos in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!