基于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
相关产品推荐
相关产品推荐

