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

基于Dots值实现每10像素递增的椭圆绘制逻辑优化

C# 按指定数量绘制等距偏移椭圆的实现

需求说明

现有C#绘图代码已手动绘制了x、x+10、x+20三个位置的椭圆,要求根据int类型变量Dots的数值,自动绘制后续每10像素(x轴)偏移的椭圆:当Dots > 3时,继续绘制x+30、x+40……直到椭圆总数量等于Dots。

原有代码问题分析

原代码的循环逻辑存在错误:循环变量i未参与偏移计算,导致每次循环都绘制同一个位置的椭圆,无法实现递增偏移的效果。

修正方案

方案1:基于原有代码修改(保留手动绘制前3个的逻辑)

如果需要保留已有的前3个椭圆绘制代码,只需计算超出3个后的数量,从x+30开始逐个偏移10像素绘制:

Graphics g = e.Graphics;

int Dots = 6;
// 手动绘制前3个椭圆
g.FillEllipse(b, new Rectangle(x, y, 5, 5));
g.FillEllipse(b, new Rectangle(x + 10, y, 5, 5));
g.FillEllipse(b, new Rectangle(x + 20, y, 5, 5));

if (Dots > 3)
{
    // 需要额外绘制的椭圆数量:Dots - 3
    for (int i = 3; i < Dots; i++)
    {
        // 偏移量为i * 10:第4个对应i=3 → x+30,第5个i=4 → x+40,以此类推
        int offsetX = i * 10;
        g.FillEllipse(b, new Rectangle(x + offsetX, y, 5, 5));
    }
}

方案2:统一循环优化(更简洁,适配所有Dots值)

直接通过循环绘制所有椭圆,无需区分是否大于3,代码更简洁且能处理Dots ≤3的情况:

Graphics g = e.Graphics;

int Dots = 6;
// 循环Dots次,每次计算对应偏移量
for (int i = 0; i < Dots; i++)
{
    // 第i个椭圆的x偏移为i*10,依次对应x、x+10、x+20...
    int currentX = x + i * 10;
    g.FillEllipse(b, new Rectangle(currentX, y, 5, 5));
}

关键逻辑说明

  • 偏移量计算核心:每个椭圆的x轴偏移值为i * 10,其中i是当前椭圆的索引(从0开始),确保每两个相邻椭圆的x轴间隔为10像素。
  • 方案2优势:无需额外判断Dots的数值,不管Dots是1、3还是6,都能自动绘制对应数量的等距椭圆,代码复用性更强。

内容的提问来源于stack exchange,提问作者WLFree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:25:35