Julia中像素网格点绘制:如何将连续线转为离散像素点展示
实现像素点式线段绘制的两种方法
方法一:修改现有绘图调用,仅显示标记点
你的代码里plot函数默认会将点连接成线,只需设置linestyle=:none就能只显示离散的像素点,或者直接使用scatter函数(专门用于绘制散点):
修改后的代码
using Plots function plotline(x1,y1,x2,y2) a=(x2-x1)/(y2-y1) c=(x2*y1-x1*y2)/(y2-y1) y=collect(y1:y2) x=round.(y.*a .- c) # 合并运算,简化代码 # 方法1:使用plot并关闭连线 display(plot(x,y,label="plotline",shape=:circle, color=:red, linestyle=:none)) # 方法2:直接用scatter函数 # display(scatter(x,y,label="plotline",shape=:circle, color=:red)) end plotline(1,1,4,13)
这样就能得到独立的圆形像素点,不会有连线干扰。
方法二:用热图模拟像素画布
如果要更贴近“像素块”的视觉效果(像位图那样的方格像素),可以用热图实现:
热图版代码
using Plots function plotline_pixel(x1,y1,x2,y2) a=(x2-x1)/(y2-y1) c=(x2*y1-x1*y2)/(y2-y1) y=collect(y1:y2) x=round.(y.*a .- c) # 确定画布的边界范围 min_x, max_x = minimum(x), maximum(x) min_y, max_y = minimum(y), maximum(y) # 初始化空白像素矩阵,行对应y轴,列对应x轴 pixel_matrix = zeros(Int, Int(max_y - min_y + 1), Int(max_x - min_x + 1)) # 标记计算出的像素位置 for (xi, yi) in zip(x, y) # 转换为矩阵的索引(注意y轴翻转,因为矩阵行从上到下,图像y轴从下到上) row_idx = Int(yi - min_y + 1) col_idx = Int(xi - min_x + 1) pixel_matrix[row_idx, col_idx] = 1 end # 绘制热图,设置颜色、坐标轴和翻转y轴 display(heatmap(min_x:max_x, min_y:max_y, pixel_matrix, c=:reds, yflip=true, xlabel="X", ylabel="Y", label="线段像素点")) end plotline_pixel(1,1,4,13)
这个方法会生成类似像素网格的效果,每个选中的位置显示为红色方块,更贴近传统像素绘制的视觉体验。
内容的提问来源于stack exchange,提问作者I Like Algebra
相关产品推荐
相关产品推荐

