找到圆的交点的问题

时间:2011-03-09 05:50:40

标签: matlab geometry

最近我发布了another thread,答案非常有帮助。从 this reference开始,我尝试编写两个相交圆的代码。

  1. 我认为我的代码做错了,结果是它给了我交叉点连接线的中点。我不知道我的代码有什么问题。

  2. 我发现很难处理循环。我需要向量的实际长度但是如果我将它写入循环,对于i+1它会向我显示错误(这是非常自然的,因为我找不到任何'<'运算符:(()

  3. 这是我的代码 -

    Xs  = [150,130];% x coordinates of center of circles
    Ys = [100,250];% y coordinates of center of circles
    Rs = [100,70];% radius of circles
    
    C=Imread('spinks_map.png');
    figure, Imshow(C)
    hold on;
    
    simple_draw_circle( Xs, Ys, Rs);
    
    
    for i=1:length(Xs)-1
        dsq(i) = ((Xs(i+1)- Xs(i))^2) + ((Ys(i+1) - Ys(i))^2);
        K(i)= (sqrt((((Rs(i)+Rs(i+1))^2)-dsq(i))-(dsq(i)-(Rs(i)-Rs(i+1))^2)))/4;
        x(i) = ((Xs(i+1)+Xs(i))/2) + ((Xs(i+1)-Xs(i))*(Rs(i)^2-Rs(i+1)^2)/dsq(i))/2 - 2*(Ys(i+1)-Ys(i))*(K(i)/dsq(i));
        y(i) = ((Ys(i+1)+Ys(i))/2) + ((Ys(i+1)-Ys(i))*(Rs(i)^2-Rs(i+1)^2)/dsq(i))/2 +(-2)*(Xs(i+1)-Xs(i))*(K(i)/dsq(i));
    end
    
    scatter(x(1),y(1),'filled');
    

1 个答案:

答案 0 :(得分:1)

您使用Heron公式时出错。看看你发布的链接给出了K的计算。在平方根内的两个术语之间应该有一个产品,没有区别:

K(i)= (sqrt((((Rs(i)+Rs(i+1))^2)-dsq(i))*(dsq(i)-(Rs(i)-Rs(i+1))^2)))/4;

另外,关于你的第二个问题。如果我在使用带有“:”的表达式时明确声明操作顺序,我发现这对我来说是最好的做法。

对于你的循环,使用适当的选择

for i=(1:length(Xs))-1

for i=1:(length(Xs)-1)

可以减少索引期间的意外行为。这是我从你的帖子中理解的问题。如果是其他内容,那么发布Matlab吐出的错误文本,我会看看它。

有一个“<” Matlab中的运算符。如果您尝试以C等效循环的样式使用它:

for(iter=0;iter++,iter<2){
     something();
}

然后查看Matlab while循环的语法。

祝你好运,

安德鲁