2014-03-07 106 views
0

的任务肯定是有Recursively create apollonian gaskets [With solution]阿波罗垫片 - 算法

描述,但我试图找到所有圆的半径。所以,我用它Descartes' theorem。您可以使用曲率找到半径。

但算法中有错误,因为输出与检查数据不同。

你觉得呢,它在哪里?

找到新圆的曲率的公式。

public static double next(double a,double b, double c){ 
    return (a+b+c+2*Math.sqrt(a*b+b*c+c*a)); 
} 

查找所有曲率的代码。

Radius = 1/curvature

Su =除了最大圈之外,垫片中所有圈的面积之和。

Ar =垫片中所有圈的除了最大圈之外的所有圈的周长之和。

public static void newCircle(double a,double b, double c){ 
    double k=next(a,b,c); 
    Su=(float) (Su+2*(2*Math.PI*(1/k))); 
    Ar=(float) (Ar+2*(Math.PI*((1/k)*(1/k)))); 
    if(2*(1/k)>minD){ 
     newCircle(a,c,k); 
    } 
} 

我建议,必须有一些东西,这将使我的算法真正。例如,输出应该是'2439.258588 835.263228',但它是'2161.9133 499.28397'。 但我无法找到,什么是不正确的。 也许,我认为应该以另一种方式找到新的圈子,即一个圈子给出2个新的圈子(半径相同)。前2圈和一个大的给2个圈,比一个大,第一,新圈子的人给2 ... 所以

'newCircle(k1,k2,next); 
    newCircle(k1,k3,next);' 

'k1' - 大 'k2,k3' - 第一批

好了,现在有很好的解决方法Recursively create apollonian gaskets [With solution]

+0

你的错误算法是什么意思?发生什么不应该? – Math

+0

我建议,必须有一些东西,这将使我的算法真正。例如,输出应该是'2439.258588 835.263228',但是'2161.9133 499.28397'。 但我无法找到,什么是不正确的。 – Alice

回答

0

лох,пидр ........................... ......... .................. ........................... ... ........... ............. ........................... ........ ................... ........................... .. ......................... ........................ ... ........................... .................. ......... ........................... ............ ............... ........................... ...... ..................... ........................... ........................... ...................... ..... ........................... ................ ...........