如何使绘制的正方形处于同一水平高度?Java绘图代码求助
看起来你是想让递归绘制的正方形在同一水平线上对齐,但目前的代码没达到预期——核心问题在于你需要明确对齐的基准是顶部、底部还是中心,不同的对齐方式需要不同的y值计算逻辑。我来帮你逐个分析:
1. 如果你想要底部对齐(所有正方形底部在同一水平线)
这应该是最常见的需求,当前代码里y值不变的话,正方形会顶部对齐,但底部会因为尺寸缩小而往上偏移。要让底部对齐,我们需要保证每个正方形的底部y坐标和初始正方形的底部一致:
初始正方形的底部坐标是 初始y + 初始size,对于新的小正方形,它的左上角y应该是 (初始y + 初始size) - 新size(这样新正方形的底部就是 新y + 新size = 初始y + 初始size)。
我们可以给递归函数增加两个参数,用来保存初始的基准y和size:
public void drawSquare(Graphics g, int x, int y, int size, int baseY, int baseSize) { g.drawRect(x, y, size, size); if (size > 2 && x < 1001 && y <= 200) { int newSize = size * 3 / 4; int newX = x + 10 + size; // 计算新的y,让底部和初始正方形对齐 int newY = baseY + baseSize - newSize; drawSquare(g, newX, newY, newSize, baseY, baseSize); } }
初始调用的时候,把基准参数设为初始的y和size就行:
// 比如初始位置x=50,y=150,size=200 drawSquare(g, 50, 150, 200, 150, 200);
2. 如果你想要顶部对齐(所有正方形顶部在同一水平线)
其实你当前的代码逻辑是对的!因为drawRect的y参数是正方形左上角的坐标,只要递归时y值不变,所有正方形的顶部都会在同一水平线上。如果这不符合你的预期,可能是你误解了drawRect的参数含义,或者初始调用的y值不是你想要的顶部位置。
如果要确认,你可以尝试把初始y设为一个固定值(比如100),然后看绘制效果——所有正方形的顶部都会从y=100开始。
3. 如果你想要中心对齐(所有正方形中心在同一水平线)
如果希望所有正方形的中心在同一水平线上,那需要让每个正方形的中心y坐标和初始正方形一致:初始中心y是 初始y + 初始size/2,新正方形的中心y是 新y + 新size/2,所以新y的计算方式是:
int newY = baseY + (baseSize - newSize) / 2;
对应的完整函数和底部对齐类似,只是修改newY的计算逻辑即可。
内容的提问来源于stack exchange,提问作者Omnipotent Thaumaturge

