利用Matlab coder转换代码,明明已经改了格式了,还是报错,应该怎么修改呀?在线发问,求大家伙帮忙解答
main.m
clear;close all;clc;
% 随机生成n个圆心的坐标
n = 5;
Cic_Coordinate = rand(n,2)*50;
%随机生成n个圆的半径
Cic_R = 15+rand(n,1)*15;
% 画n个圆
figure;
hold on;
for i = 1:n
theta = 0:0.001:2*pi;
x = Cic_Coordinate(i,1)+Cic_R(i)*cos(theta);
y = Cic_Coordinate(i,2)+Cic_R(i)*sin(theta);
plot(x,y,'-');
end
axis equal
%判断多圆之间的关系
for i = 1:n-1
for j = i+1:n
Cic_0 = Cic_Coordinate(i,:);
Cic_1 = Cic_Coordinate(j,:);
x0=Cic_0(1); y0=Cic_0(2); r0=Cic_R(i);
x1=Cic_1(1); y1=Cic_1(2); r1=Cic_R(j);
d=sqrt((x0-x1)^2+(y0-y1)^2); %两圆心距离
if d>r0+r1
disp(['第',num2str(i),'个圆与第',num2str(j),'个圆的位置关系为:外离'])
disp(['第',num2str(i),'个圆的坐标、半径是:',num2str(x0),' ',num2str(y0),' ',num2str(r0),' ',...
'第',num2str(j),'个圆的坐标、半径是:',num2str(x1),' ',num2str(y1),' ',num2str(r1)])
elseif d<abs(r0-r1)
disp(['第',num2str(i),'个圆与第',num2str(j),'个圆的位置关系为:内含'])
disp(['第',num2str(i),'个圆的坐标、半径是:',num2str(x0),' ',num2str(y0),' ',num2str(r0),' ',...
'第',num2str(j),'个圆的坐标、半径是:',num2str(x1),' ',num2str(y1),' ',num2str(r1)])
elseif d==r0+r1
disp(['第',num2str(i),'个圆与第',num2str(j),'个圆的位置关系为:外切'])
disp(['第',num2str(i),'个圆的坐标、半径是:',num2str(x0),' ',num2str(y0),' ',num2str(r0),' ',...
'第',num2str(j),'个圆的坐标、半径是:',num2str(x1),' ',num2str(y1),' ',num2str(r1)])
p=CircleCross(Cic_0,Cic_1,r0,r1);
plot(p(:,1),p(:,2),'.','MarkerSize',15);
disp(['外切点坐标是:',num2str(p(1)),' ',num2str(p(2))]);
elseif d==abs(r0-r1)
disp(['第',num2str(i),'个圆与第',num2str(j),'个圆的位置关系为:内切'])
disp(['第',num2str(i),'个圆的坐标、半径是:',num2str(x0),' ',num2str(y0),' ',num2str(r0),' ',...
'第',num2str(j),'个圆的坐标、半径是:',num2str(x1),' ',num2str(y1),' ',num2str(r1)])
p=CircleCross(Cic_0,Cic_1,r0,r1);
plot(p(:,1),p(:,2),'.','MarkerSize',15);
disp(['内切点坐标是:',num2str(p(1)),' ',num2str(p(2))]);
else
disp(['第',num2str(i),'个圆与第',num2str(j),'个圆的位置关系为:相交'])
disp(['第',num2str(i),'个圆的坐标、半径是:',num2str(x0),' ',num2str(y0),' ',num2str(r0),' ',...
'第',num2str(j),'个圆的坐标、半径是:',num2str(x1),' ',num2str(y1),' ',num2str(r1)])
p=CircleCross(Cic_0,Cic_1,r0,r1);
plot(p(:,1),p(:,2),'.','MarkerSize',15);
disp(['交点坐标是:',num2str(p(1,1)),' ',num2str(p(1,2)),'和',...
num2str(p(2,1)),' ',num2str(p(2,2))]);
end
end
end
CircleCross.m
function p=CircleCross(Cic_0,Cic_1,R_0,R_1)
x0=Cic_0(1);
y0=Cic_0(2);
r0=R_0;
x1=Cic_1(1);
y1=Cic_1(2);
r1=R_1;
d=sqrt((x0-x1)^2+(y0-y1)^2); %两圆心距离
k1=(y0-y1)/(x0-x1); %连接两圆心直线
b1=y1-k1*x1;
k2=-1/k1; %公共弦方程直线
b2=(r0^2-r1^2-x0^2+x1^2-y0^2+y1^2)/(2*(y1-y0));
p=[];
if d==abs(r1-r0) || d==r1+r0 %相切时的交点
xx=-(b1-b2)/(k1-k2);
yy=-(-b2*k1+b1*k2)/(k1-k2);
p=[xx yy];
elseif abs(r1-r0)<d && d<r1+r0 %相交时的交点
%公共弦方程与其中一个圆的交点
xx1=(-b2* k2 + x1 + k2 *y1 - sqrt(-b2^2 + r1^2 + k2^2 *r1^2 - 2 *b2* k2* x1 - k2^2* x1^2 + 2*b2*y1 + 2*k2*x1*y1 - y1^2))/(1 + k2^2);
yy1=k2*xx1+b2;
xx2=(-b2* k2 + x1 + k2 *y1 + sqrt(-b2^2 + r1^2 + k2^2 *r1^2 - 2 *b2* k2* x1 - k2^2* x1^2 + 2*b2*y1 + 2*k2*x1*y1 - y1^2))/(1 + k2^2);
yy2=k2*xx2+b2;
p=[xx1 yy1;xx2 yy2];
end
end