【问题标题】:Draw a Line in Java using length not coordinates在Java中使用长度而不是坐标绘制一条线
【发布时间】:2016-02-25 19:10:51
【问题描述】:

我正在尝试制作一个绘制科赫分形的程序。有什么办法可以在Java中按长度而不是坐标画一条线?

科赫分形看起来有点像雪花。重复模式是等边三角形插入每条线的 1/3(三角形的边是线长的 1/3)。

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

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

【问题讨论】:

  • 哪个绘图/绘画 API?
  • 您搜索了什么?您在发布此问题时是否查看了相关问题?
  • 我确实读过这个问题,但我不知道如何将它应用于我的问题。 @sparky 感谢您编辑此内容,这是我在这里的第一个问题,我的自然倾向是过度告知
  • 嗨杰奎琳,如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

标签: java recursion lines


【解决方案1】:

首先,我假设您在用于 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(...) 函数时,它才会起作用。

实施

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

【讨论】:

  • 我正在使用具有 4 个坐标的 drawLine。让我失望的是,我的理解是,程序每次增加复杂度时都会完全重新绘制整条线。只需添加更多的三角形就可以很容易地手工绘制这个设计,但是当我开始考虑每次使用坐标重新绘制整个东西时,似乎不可能找出新的坐标。我想我需要刷新我的三角技能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 2021-11-26
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多