我需要绘制一个填充正方形,该正方形必须用中心线绘制。我们不能使用 java 形状
我们有一个中心点,笔必须在每个角度从中心到方形边缘画一条线。
这里的问题是数学,我可以用什么来计算绘画所需的距离。因为如果我总是使用相同的距离,它会画一个圆圈。
谢谢
绘制正方形时,您可以将需要以任何角度绘制的长度视为直角三角形的斜边的长度。你可以很容易地用三角比解决这个问题。棘手的部分是三角形的底边会四处移动。
以下图左半部分所示的 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));
}
注意:此代码以度为单位表示角度,仅适用于正角度。此外,如果您想让线条在周界周围以均匀增量与正方形相交,那么您需要提出一个解决方案,该解决方案使用勾股定理计算出斜边的长度,然后使用三角函数计算出角度画在。
希望有帮助。
我会说这样的话
for(int i = sideLength * -1; i < sideLength; i++) {
for(int j = sideLength * -1; j < sideLength; j++) {
graphics.drawLine(centerX + i, centerY + j);
}
}
这样,它会在您尝试制作的正方形中的每个点上画一条线。我不确定这是否是您想要的,但它会起作用。