24小时热门版块排行榜    

CyRhmU.jpeg
查看: 902  |  回复: 3

小灰灰的世界

金虫 (正式写手)

[求助] matlab解方程组求助已有1人参与

已知圆心不在坐标原点的圆上两点相对圆心的坐标,两点到原点的连线分别与圆心到原点连线的夹角也已知,求圆心坐标。
用matlab写的程序,能够得到正确结果,但是改变两个点的位置,比如将theta改为theta = [0, pi/3],就得不到正确的解,用folve命令也尝试过,得到的结论一样,就大神指教

x0 = 15;                                        %圆心(未知)
y0 = 18;                                        %圆心(未知)
r = 3;                                              %圆半径(已知)
theta = [0, pi/6];                            %圆上两点相对圆心的极角(已知)
%theta = [0, pi/3];
x = x0 +r*cos(theta);                     %圆上两点的坐标(未知)
y = y0 +r*sin(theta);                      %圆上两点的坐标(未知)

phi0 = atan(y0/x0);                        %圆心相对原点的极角(已知)
phi = atan(y./x);                             %圆上两点相对原点的极角(已知)

syms  x0_c y0_c

x_c = x0_c +r*cos(theta);
y_c = y0_c +r*sin(theta);

eq1 = phi0 - phi(1) - acos((x_c(1)*x0_c+y_c(1)*y0_c)/(sqrt(x_c(1)^2+y_c(1)^2)*sqrt(x0_c^2+y0_c^2)));
eq2 = phi0 - phi(2) - acos((x_c(2)*x0_c+y_c(2)*y0_c)/(sqrt(x_c(2)^2+y_c(2)^2)*sqrt(x0_c^2+y0_c^2)));

[x0_c, y0_c] = solve(eval(eq1), eval(eq2));

x0_c = double(x0_c);
y0_c = double(y0_c);
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤神宇

版主 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +1
是否是由于 theta  %圆上两点相对圆心的极角  本身就存在上限? 你可以多试试几组参数,如 %theta = [0, pi/4]; %theta = [0, pi/5];
数值计算
2楼2018-05-21 16:46:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小灰灰的世界

金虫 (正式写手)

引用回帖:
2楼: Originally posted by 独孤神宇 at 2018-05-21 16:46:40
是否是由于 theta  %圆上两点相对圆心的极角  本身就存在上限? 你可以多试试几组参数,如 %theta = ; %theta = ;

圆上的点的极角理论上可以取0~2*pi的,可是大了就不行
3楼2018-05-21 16:57:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

独孤神宇

版主 (知名作家)

【答案】应助回帖

引用回帖:
3楼: Originally posted by 小灰灰的世界 at 2018-05-21 16:57:54
圆上的点的极角理论上可以取0~2*pi的,可是大了就不行...

那这可能是其他参数取值不当 导致 acos(x) 中 |x|>1  ,注意检查一下。
数值计算
4楼2018-05-21 20:12:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 小灰灰的世界 的主题更新
信息提示
请填处理意见