Java:使用直线从中心点绘制一个填充的正方形

时间:2012-11-14 01:09:34

标签: java graphics awt draw shapes

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

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

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

由于

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

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

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

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

注意:此代码以度为单位取角度,仅适用于正角度。此外,如果你想让线条在围绕perimiter的周围以均匀的方式与方形相交,那么你需要提出一个解决方案,使用毕达哥拉斯定理计算出hypoteneuse的长度,然后使用三角法计算角度到画它。

希望有所帮助。

Showing the triangle flipping over it's hypoteneuse at 45 degrees.

答案 2 :(得分:0)

我会说这样的事情

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

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