【问题标题】:Java: Draw a fill squre from a center point using linesJava:使用线条从中心点绘制填充正方形
【发布时间】:2012-11-14 01:09:33
【问题描述】:

我需要绘制一个填充正方形,该正方形必须用中心线绘制。 我们不能使用 java 形状

我们有一个中心点,笔必须在每个角度从中心到方形边缘画一条线。

这里的问题是数学,我可以用什么来计算绘画所需的距离。因为如果我总是使用相同的距离,它会画一个圆圈。

谢谢

【问题讨论】:

  • 显示您当前使用的内容,人们可以更快地帮助您。线条应该从中心到边缘。您需要改变的只是角度。

标签: java graphics awt draw shapes


【解决方案1】:

在绘制正方形时,您可以将需要在任何角度绘制的长度视为直角三角形的斜边的长度。你可以很容易地用三角比解决这个问题。棘手的部分是三角形的底边会四处移动。

以下图左半部分的 45 度直线为例:

您需要计算出红线(hyp)的长度。您可以使用 三角函数根据它的角度来计算 hyp 的长度 adj 和长度 形容词adj边的长度是高度的一半 正方形。

要使用的公式是:

cos(角度) = adj/hyp

重新排列:

hyp = adj/cos(角度)

代码如下所示:

public static double calculateLengthToPaint(double angle, double heightOfSquare){
      return  (heightOfSquare/2.0) / Math.cos(Math.toRadians(angle));
}

不幸的是,这还不是全部。这对于前 45 度非常有效,但是当角度 > 45 度时,三角形的相邻边会改变位置(如下图右半部分所示)。它每 45 度翻转一次。

要处理这种翻转,您需要使用传递给方法的角度(从 12 点钟位置开始围绕正方形的角度)来计算出我们想象的三角形的角度。我已经修改了上面的方法来添加逻辑来计算出校正的角度。

public static double calculateLengthToPaint(double angle, double heightOfSquare){
    double flippy = angle % 90;
    if (flippy > 45.0){
        flippy -= 90;
        flippy = Math.abs(flippy);
    }
      return  (heightOfSquare/2.0) / Math.cos(Math.toRadians(flippy));
}

注意:此代码以度为单位表示角度,仅适用于正角度。此外,如果您想让线条在周界周围以均匀增量与正方形相交,那么您需要提出一个解决方案,该解决方案使用勾股定理计算出斜边的长度,然后使用三角函数计算出角度画出来。

希望对您有所帮助。

【讨论】:

  • 它解决了我的问题! :D 感谢您的解释,非常有用:)
【解决方案2】:

【讨论】:

    【解决方案3】:

    我会这样说

    for(int i = sideLength * -1; i < sideLength; i++) {
    for(int j = sideLength * -1; j < sideLength; j++) {
       graphics.drawLine(centerX + i, centerY + j);
    }
    }
    

    这样,它会在您尝试制作的正方形中的每个点上画一条线。我不确定这是否是您想要的,但它会起作用。

    【讨论】:

      猜你喜欢
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 2014-10-27
      相关资源
      最近更新 更多