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"

2 visualizzazioni (ultimi 30 giorni)
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

Risposte (1)

Walter Roberson
Walter Roberson il 24 Gen 2023
Modificato: Walter Roberson il 24 Gen 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....)

Categorie

Scopri di più su Polar Plots in Help Center e File Exchange

Prodotti


Release

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by