使用长度而非坐标在Java中绘制一条线

时间:2016-02-25 19:10:52

标签: java recursion lines

我试图制作一个绘制Koch分形的程序。有什么方法可以用Java而不是坐标在Java中画一条线?

koch分形看起来有点像雪花。重复图案是在每条线的1/3处插入的等边三角形(三角形的边是线的长度的1/3)。 enter image description here

最初我试图递归绘制三角形,但我无法弄清楚如何计算坐标。然后我认为如果我可以只绘制一定长度的线并旋转它们,并且每次都减少线的长度会更容易。除了我不知道我是否可以在Java中绘制长度。我试过在互联网上搜索这个并没有找到答案,这让我认为这是不可能的,但我想我会问这里只是为了确保。

我意识到这远远超出了我的技术大学水平。我也意识到我可能会找到一个其他人已经编写的完整程序,但我想知道我是否可以自己解决(主要是)我自己。

1 个答案:

答案 0 :(得分:0)

首先,我假设您在用于Java的任何API中都有某种函数drawLine(int x1, int y1, int x2, int y2)。如果这是真的,并且你想要按长度绘制一条线,我相信你可以使用标准的三角函数(Math.sin(...)Math.cos(...)Math.tan(...))来完成它。

示例

您希望使用给定长度绘制的内容至少是以下数据:

  • 起始坐标
  • 线的角度y = c(其中c是任意数字)
  • 行的长度

您的代码可以使用以下内容:

public void drawLineByLength(int xStart, int yStart, double angle, double length) {
    int xEnd = (int) (xStart + (Math.cos(angle) * length));
    int yEnd = (int) (yStart + (Math.sin(angle) * length));

    drawLine(xStart, yStart, xEnd, yEnd);
}

请注意,您必须为此方法导入Math类。此外,只有当你有一个drawLine(...)函数可以获得两点坐标时,它才会起作用。

<强>实施

如果我理解你的意图,你会想要跟踪当前的坐标&#34; pen&#34;在;它吸引的角度;以及它要绘制的下一行的长度。您可以在更新这些变量的drawLineByLength(...)方法的末尾添加一些内容。