的任务肯定是有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]
你的错误算法是什么意思?发生什么不应该? – Math
我建议,必须有一些东西,这将使我的算法真正。例如,输出应该是'2439.258588 835.263228',但是'2161.9133 499.28397'。 但我无法找到,什么是不正确的。 – Alice