1

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

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

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

谢谢

4

3 回答 3

1

只需使用java.awt.Graphics.fillRect(int, int, int, int).

于 2012-11-14T02:17:52.900 回答
1

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

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

你需要计算出红线的长度(hyp)。您可以使用三角函数根据其与 adj 的角度和 adj 的长度来计算 hyp 的长度。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));
}

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

希望有帮助。

显示三角形翻转它的斜边在 45 度。

于 2012-11-14T13:15:28.917 回答
0

我会说这样的话

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

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

于 2012-11-14T01:42:11.487 回答