Hi, I am trying to produce randomly circles with same radius in defined range or square. I wrote the code, but it show error " Out of memory. The likely cause is an infinite"

1 vue (au cours des 30 derniers jours)
function h = circle(x,y,r, N)
%INPUT
%x= range of x
%y= range of y
%OUTPUT
% circles between x and y range with same radious
hold on
x=[0 10];
y=[0 10];
r=5;
N=5;
for i=1:1:N
while 1
x1=min(x)+(max(x)-min(x))*rand(1);
y1=min(y)+(max(y)-min(y))*rand(1);
th = 0:pi/50:2*pi;
x2 = r * cos(th) + x1;
y2 = r * sin(th) + y2;
for i=1:1:size(circle)
x1=circle(i,1);
y1=circle(i,2);
x2=circle(i,3);
y2=circle(i,4);
h = plot([x1, y1],[x2, y2], "b");
pos = [min(x1,x2) min(y1,y2) abs(x2-x1) abs(y2-y1)];
rectangle('Position',pos,'Curvature',[1 1]);
end
end
end
hold off

Réponses (1)

Walter Roberson
Walter Roberson le 24 Jan 2023
Modifié(e) : Walter Roberson le 24 Jan 2023
function h = circle(x,y,r, N)
...
for i=1:1:size(circle)
circle is not a local variable in the function circle, and is not the target of an import statement. Therefore the reference to size(circle) is a request to execute the function circle with no parameters, and when that call eventually returns, to return a vector of the size of the return value of the function circle. The return value of size() is always at least two values. You are using that vector with the : operator. When you use a non-scalar with a : operator, then the effect is the same as taking only the first value in the array.
So that section of code is equivalent to
temporary_variable = circle(); %call circle
temporary_variable2 = size(temporary_variable); %take the size of what circle() returned
for i = 1 : 1 : temporary_variable2(1)
and in turn that would be equivalent to
temporary_variable = circle(); %call circle
for i = 1 : 1 : size(temporary_variable,1)
So what is this function circle that needs to be executed in order to discard its output other than to take the number of rows of the output? Why, circle is the very function that you are executing. So the function circle cannot finish executing to return a value until the function circle finishes executing (which cannot finish until the function circle() finishes executing, which cannot finish until....)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by