Conda创建环境秒报错?手把手教你用清华镜像源正确配置Linux下的.condarc文件(避坑SSL)
2026/4/29 13:29:25
计算斜率和截距,通过y = kx + b的直线表达式计算每一个x对应的y值
'''基础算法''' def drawLine_Basic(grid, start, end): k = (end.y-start.y)/(end.x-start.x) b = start.y - k * start.x for xi in range(start.x, end.x): # 栅格的性质 yi = k * xi + b drawPixel(xi, int(yi+0.5), 1, grid) # y坐标要进行近似|k|<=1时,x每增加1,y增加k|k|>1时,y每增加1,x增加1/k|k|<=1当情况)'''数值微分算法(DDA)''' def drawLine_DDA(grid, start, end): k = (end.y - start.y) / (end.x - start.x) xi, yi = start.x, start.y if(abs(k<=1)): for xi in range(start.x, end.x): drawPixel(xi, int(yi+0.5), 1, grid) yi += k else: for yi in range(start.y, end.y): drawPixel(int(xi+0.5), yi, 1, grid) xi += 1/kax + by + c =0a = y0 - y1b = x1 - x0c = x0y1 - x1y0**(xp+1, yp+0.5)(x+1, y+1)(x+1, y)'''中点画线法(k<=1)''' def drwaLine_MidPoint(grid, start, end): a, b, c = start.y-end.y, end.x-start.x, start.x*end.y-end.x*start.y xp, yp = start.x, start.y for xp in range(start.x, end.x): drawPixel(xp, yp, 1, grid) delta = a*(xp+1) + b*(yp+0.5) + c # 考核点(xp+1, yp+0.5) if delta<0: yp += 1 else: # yp += 0 passp1,增量为ap2,增量为a+bd0 = a + 0.5*bd的符号来判断,可以用2d代替d,摆脱浮点数'''中点画线法 with DDA''' def drawLine_MidPoint_with_DDA(grid, start, end): a, b = start.y-end.y, end.x-start.x d = a + (b<<2) # 用2d代替d, 摆脱小数 d1, d2 = a<<2, (a+b)<<2 xp, yp = start.x, start.y for xp in range(start.x, end.x): drawPixel(xp, yp, 1, grid) if d<0: yp += 1 d += d2 else: d += d1(x+1, y+1)(x+1, y)k-1k-0.5'''Bresenham画线法(k<=1)''' def drawLine_Bresenham(grid, start, end): k = (end.y - start.y) / (end.x - start.x) x, y = start.x, start.y e = -0.5 for x in range(start.x, end.x): drawPixel(x, y, 1, grid) if e > 0: e += k - 1 y += 1 else: e += k # y += 0k的计算2(dy - dx)2dy-dx'''Bresenham画线法(去点浮)(k<=1)''' def drawLine_Bresenham_nonreal(grid, start, end): dx, dy = (end.x - start.x), (end.y - start.y) x, y = start.x, start.y e = -dx for x in range(start.x, end.x): drawPixel(x, y, 1, grid) if e > 0: e += (dy - dx) << 2 y += 1 else: e += (dy) << 2 # y += 01/8圆(第一象限y>x部分)F>0,取正右方(x+1, y)(x+1, y-1)d<0, 增量为2*x + 32*(x-y) + 51.25 - Re = d - 0.25代替de = 1-Rd < 0<=>e < 0.25<=e始终为整数 =>e < 0'''中点画圆法(DDA)''' def drawArc_MidPoint_with_DDA(grid, R): d = 1 - R x, y = 0, R while x < y: drawPixel_symmetry8(x, y, 1, grid) if d < 0: x += 1 d += 2*x + 3 else: x += 1 y -= 1 d += ((x-y) << 1) + 5x递增1,d递增y递减1,d递增'''中点画圆法(DDA)(去点浮)''' def drawArc_MidPoint_with_DDA_nonreal(grid, R): d = 1 - R deltax, deltay = 3, 2 - (R << 1) x, y = 0, R while x < y: drawPixel_symmetry8(x, y, 1, grid) if d < 0: x += 1 d += deltax deltax += 2 else: x += 1 y -= 1 d += (deltax + deltay) deltax += 2 deltay += 2|OP1| > |OP2|,则选P2HH、D中选更近的DV、D中选更近的VD;else取VH;else,取DDH,增量取2x + 1D,增量取2x - 2y + 2V,增量取-2y + 1-2r + 2'''Bresenham画圆法''' def drawArc_Bresenham(grid, R): delta = (1 - R) << 1 x, y = 0, R while y >= 0: drawPixel_symmetry4(x, y, 1, grid) if delta < 0: delta1 = ((delta + y) << 1) - 1 if delta1 <= 0: direction = 1 else: direction = 2 elif delta > 0: delta2 = ((delta - x) << 1) - 1 if delta2 <= 0: direction = 2 else: direction = 3 else: direction = 2 if direction == 1: # 前进到 正右 x += 1 delta += (x << 1) + 1 elif direction == 2: # 前进到 右下 x += 1 y -= 1 delta += ((x - y) << 1) + 2 else: # 前进到 正下 y -= 1 delta += 1 - (y << 1)P在圆内 -> -> 向右P在圆外 -> -> 向下F<=0,增量为2x + 1-2y + 10'''正负法''' def drawArc_PositiveNegative(grid, R): F = 0 x, y = 0, R while x <= y: drawPixel_symmetry8(x, y, 1, grid) print(F) if F <= 0: F += (x << 1) + 1 x += 1 else: F += 1 - (y << 1) y -= 1'''圆内接正多边形逼近法''' def drawArc_InscribedRegularPolygonApproximate(grid, R): Alpha = 1/R cosAlpha, sinAlpha = cos(Alpha), sin(Alpha) x, y = R, 0 while x >= y: drawPixel_symmetry8(int(x+0.5), int(y+0.5), 1, grid) x = cosAlpha * x - sinAlpha * y y = sinAlpha * x + cosAlpha * y大小:1.49MB
➡️资源下载:https://download.csdn.net/download/s1t16/87404302
注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!