我刚刚写了一个小netpbm解析器,我很开心,主要绘制了参数方程式。他们第一次看起来不错,但是我如何扩展它并拥有看起来合法的东西?这张照片是我的方法如何重新创建了
的北极猴子徽标 0.5[cos(19t) - cos(21t)]
(我在叠加之前先尝试绘制两个余弦)
显然,它看起来非常“脆”且锋利。我使用了尽可能小的步长,而无需花费很多时间来完成。 (0.0005,耗时<5秒)
我唯一的想法是,当绘制白色像素时,我还应该使用稍微浅一些的灰色绘制其直接相邻像素。然后用更浅的灰色绘制THOSE像素的邻居。几乎像白色是“溶解”或“消散”。
我没有尝试实现它,因为这样做感觉很不好,我什至不确定它会产生什么效果,所以我想先问一下。
编辑:这是一个仅绘制一个小螺旋的示例代码
绘制循环:
for (int t = 0; t < 6 * M_PI; t += 0.0005)
{
double r = t;
new_x = 10 * r * cosf(0.1 * M_PI * t);
new_y = -10 * r * sinf(0.1 * M_PI * t);
img.SetPixel(new_x + img.img_width / 2, new_y + img.img_height / 2, 255);
}
//img is a PPM image with magic number P5 (binary grayscale)
SetPixel:
void PPMimage::SetPixel(const uint16_t x, const uint16_t y, const uint16_t pixelVal)
{
assert(pixelVal >= 0 && pixelVal <= max_greys && "pixelVal larger than image's maximum max_grey\n%d");
assert(x >= 0 && x < img_width && "X value larger than image width\n");
assert(y >= 0 && y < img_height && "Y value larger than image height\n");
img_raster[y * img_width + x] = pixelVal;
}
这是这段代码产生的
答案 0 :(得分:0)
散点图图(由点而不是直线组成)的一种非常基本的抗锯齿形式可以通过应用随机四舍五入来实现:将画笔视为像素大小的正方形(但请注意此模型的severe limitations),以绘制点的非整数坐标为中心,并计算其与共享最接近该点的角的四个像素的重叠度。将重叠部分视为灰度部分,并将大量像素近似于一条线,将每个像素设置为最大值,或将少量离散像素设置为 blending 点。