java - 如何递归画线

标签 java graphics recursion drawing

这是代码。我认为它没有达到我们预期的效果。

package lines;

import sedgewick.StdDraw;

public class Lines {


    public static boolean equals(double d1, double d2){
        if(Math.abs(d2-d1) < 0.00001)
            return true;
        return false;
    }

    public static void drawLine(double x1, double y1, double x2, double y2) {
        if(equals(x1,x2) && equals(y1,y2))
            return;

        double mid_x = (x2+x1)/2;
        double mid_y = (y2+y1)/2;

        drawLine(x1,y1,mid_x,mid_y);
        drawLine(mid_x+0.001,mid_y+0.001,x2,y2);

        StdDraw.point(mid_x, mid_y);

    }


    /**
     * Code to test the drawLine method visually
     */
    public static void main(String[] args) {
        StdDraw.setPenRadius(0.02);

        //
        // Test the drawing program
        //
        drawLine(0,0,1,1); // lower left to upper right
        drawLine(0,1,1,0); // upper left to lower right

        //
        // Draw rectangles of decreasing width and height
        //
        for (double r = 0.25; r < 0.5; r = r+.005) {
            double s = 1-r;
            drawLine(r,r, r, s);
            drawLine(r, s, s, s);
            drawLine(s, s, s, r);
            drawLine(s, r, r, r);
        }
        System.out.println("done drawing");
    }

}

这是我无法理解的结果。

http://grab.by/rUM0

最佳答案

首先,我想说我认为你所做的事情真的很酷。

要获得实际答案,我们需要了解 Swing 如何绘制内容。 图片只是一个像素数组。然而,像素并没有按照您直觉上的想法排列。 你会认为它会是这样的。

y
^
|
|
1
|
0--1-----> x

其实是这样的

0--1-----> x
|
1
|
|
v
y

我希望这很清楚,因为我的 ASCII 图并不多。 y 轴是倒置的,但 x 轴不是。大多数人在第一次使用 Java 绘图时需要通过某种调试来发现这一点。

如果我们回顾一下您的代码,我们会发现,如果我们在我绘制的第二张“图片”中将其形象化,那么它现在更有意义了。

编辑: 显然我错了,我道歉。 此行有问题。

drawLine(mid_x+0.001,mid_y+0.001,x2,y2);

我认为你应该删除“+0.001”

然而,这并不是我错的原因。我试图运行您的代码,但出现堆栈溢出错误。在将您的 equals 方法更改为类似这样的方法之后。

public static boolean equals(double d1, double d2){
    if(Math.abs(d2-d1) < 0.1)
        return true;
    return false;
}

我现在可以运行程序了,它给出了完美的结果。我不确定你出了什么问题。

关于java - 如何递归画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900405/

相关文章:

java - 运行 selenium 脚本时无法从弹出框中加载扩展

java - Android 图形的限制

java - 递归方法调用中的后递增/递减 (Java)

arrays - 在此 Ruby 快速排序实现中如何构建最终数组?

c# - C# 中的单例模式

java - 我如何在 Spring AOP 中访问实际的方法参数名称?

c# - 使用不安全的每像素访问绘制位图会导致空图像

ios - Cocos2d 缩放 Sprite 会导致伪影

javascript - 使用 Underscore/Lodash 在 javascript 中执行非变异反尾的最佳方法

java - : "Events are received on the UI thread and read on the main loop thread"?是什么意思