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 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
回答(1 个)
Walter Roberson
2023-1-24
编辑:Walter Roberson
2023-1-24
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....)
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Vector Fields 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!