我有以下巴拿赫分形问题: 所谓的巴纳赫曲线可以使用以下分形规则生成:
- 画一个圆圈。
- 画 9 个较小的圆,每个圆的半径是原来的 ⅓ 圆圈。较小的圆之一应与原始圆具有相同的中心。其余的中心 8 个较小的圆应沿原圆的圆周等距排列。
- 对每个较小的圆圈重复步骤 b。
注:以(x,y)点为圆心,半径为r的圆是所有点的集合
(x + r · cos(t), y + r · sin(t)) 其中 0 ≤ t ≤ 2π ,并且 t 以弧度给出。我可以使用Math.toRadians()
指南:
- 仅递归解决方案,不允许循环
- 没有进口,没有列表(所以没有 map 之类的),没有
?
- 我只能使用函数
public static void banachCurve(int n)
和帮助功能private static void banachCurve(double x, double y, double r, int n)
- 只能使用 StdDraw 来绘制或调用其他函数,不允许使用其他 Std 类
我想每次都添加圆圈,因为每次应该在边缘有 9 个圆圈,在中心有 1 个圆圈,但是我似乎只能在右侧或左侧获得圆圈,并且由于某种原因出现运行时错误。
public static void banachCurve(int n) {
banachCurve (0.5,0.5,1,n);
}
private static void banachCurve(double x, double y, double r, int n) {
if (n == 0) {
return;
}
double d = (r/3);
StdDraw.circle (x,y,d);
// StdDraw.ellipse(x, y, r, r);
banachCurve (x + d, y, d, n - 1); // centre
banachCurve (x + d+ d, y+d, d, n--); // left
banachCurve (x , y + d, d, n--); // right
banachCurve (x+d , y +d+ d, d, n--);
banachCurve (x+d , y +d, d, n--);
}
最佳答案
每次您调用 n--
,您正在通过n
到该函数,然后在下一次调用时将其减一。相反,您需要传递 n - 1
对于每个调用,因为调用本身会递减 n
进一步进行自己的递归调用,最终停在 0
正如你所正确的那样。
对于四个基点,使用(x + d, y)
, (x, y + d)
, (x - d, y)
和(x, y - d)
工作正常,但对于四个对角点,您需要使用毕达哥拉斯方法的平方根 ( Math.sqrt
),或三角方法的正弦和余弦 ( Math.sin
和 Math.cos
)。使用(x + d, y + d)
等会将它们放在一个正方形上。
假设x
和y
标记你的圆的中心,你的函数将变成:
private static void banachCurve(final double x, final double y, final double r, final int n) {
if (n == 0) {
return;
}
final double d = r / 3;
StdDraw.circle (x, y, d);
banachCurve (x, y, d, n - 1); // centre
banachCurve (x, y + d, d, n - 1); // north
banachCurve (x + d, y, d, n - 1); // east
banachCurve (x, y - d, d, n - 1); // south
banachCurve (x - d, y, d, n - 1); // west
// Get the diagonal radius for a point at 45 degrees on the circle
final double diagD = Math.cos(Math.toRadians(45)) * d;
banachCurve (x + diagD, y + diagD, d, n - 1); // north-east
banachCurve (x + diagD, y - diagD, d, n - 1); // south-east
banachCurve (x - diagD, y - diagD, d, n - 1); // south-west
banachCurve (x - diagD, y + diagD, d, n - 1); // north-west
}
这是 banachCurve(0.5, 0.5, 1, 6);
的输出:
关于java - Banach 分形曲线 Java - 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53742173/