我想找到两个点A和B之间的圆心,知道两个点的(x,y)对,以及圆半径。
这应该分别产生两对中心候选者,[Xcenter1,Ycenter1]和[Xcenter2,Ycenter2]。它们对应于段[AB]左侧和右侧的圆心。
我编写了以下符号Matlab脚本:
syms x1 y1 x2 y2 xc yc r
f1 = (x1-xc)^2 + (y1-yc)^2 - r^2;
f2 = (x2-xc)^2 + (y2-yc)^2 - r^2;
solve(f1,f2,'xc,yc')
结果是:
ans =
xc: [2x1 sym]
yc: [2x1 sym]
从thread开始,结果如下:
xc1 = x1/2 + x2/2 - (y1*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2 + (y2*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2
xc2 = -(2*y1*(y1/2 + y2/2 - (x1*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2 + (x2*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2) - 2*y2*(y1/2 + y2/2 - (x1*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2 + (x2*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2) - x1^2 + x2^2 - y1^2 + y2^2)/(2*x1 - 2*x2)
yc1 = y1/2 + y2/2 + (x1*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2 - (x2*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2
yc2 = y1/2 + y2/2 - (x1*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2 + (x2*(-(x1^2 - 4*r^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2)/(x1^2 - 2*x1*x2 + x2^2 + y1^2 - 2*y1*y2 + y2^2))^(1/2))/2
我可能做错了什么?提前感谢任何建议。
答案 0 :(得分:0)
如果在不存储输出的情况下调用函数,Matlab会自动将输出存储在名为ans
的变量中。该变量不可靠,因为后续调用具有未分配输出的另一个函数可能会覆盖ans
的值。
在solve
的特定情况下,它有一些方法可以访问它的输出(参见documentation)。默认情况下,它返回包含函数变量的结构(在本例中为xc
和yc
)。由于没有分配变量,ans
变量存储了此结构。
尝试以这种方式调用solve
:
[xc,yc] = solve(f1,f2,'xc,yc')
现在您拥有它的输出(xc
和yc
)并可以按预期使用它们。您也可以这样调用函数:
S = solve(f1,f2,'xc,yc')
然后您将S.xc
和S.yc
存储为结构。