我需要绘制一个填充方块,该方块必须用中心的线条绘制。 我们不能使用java形状
我们有一个中心点,笔必须在每个角度从中心到方形边缘画一条线。
这里的问题是数学,我可以用什么来计算绘画所需的距离。因为如果我总是使用相同的距离,它会绘制一个圆圈。
由于
答案 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的长度,然后使用三角法计算角度到画它。
希望有所帮助。
答案 2 :(得分:0)
我会说这样的事情
for(int i = sideLength * -1; i < sideLength; i++) {
for(int j = sideLength * -1; j < sideLength; j++) {
graphics.drawLine(centerX + i, centerY + j);
}
}
这样,它会为您正在尝试制作的广场中的每个点画一条线。我不确定这是否是你想要的,但它会起作用。