You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使绘制的正方形处于同一水平高度?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:21:12