Python 画一个像素或点

Python 画一个像素或点,python,svg,Python,Svg,我想用svgwrite画一条曲线,我想逐像素地画,因为我在计算坐标 我该怎么做呢?我假设您要将贝塞尔曲线变换为一组点。因此,您需要使用参数t=0扫描到t=1 您可以通过这种递归方式来执行此操作,例如,您可以分割t的值,直到它们最多相差一个像素。比如: void bezier_recursive (double tfrom, double tto, Point relative, List<Point> points) double tmiddle = 0.5*(tfrom,t

我想用svgwrite画一条曲线,我想逐像素地画,因为我在计算坐标


我该怎么做呢?

我假设您要将贝塞尔曲线变换为一组点。因此,您需要使用参数
t=0
扫描到
t=1

您可以通过这种递归方式来执行此操作,例如,您可以分割
t
的值,直到它们最多相差一个像素。比如:

void bezier_recursive (double tfrom, double tto, Point relative, List<Point> points)
    double tmiddle = 0.5*(tfrom,tto));
    Point pt = bezier(tmiddle);
    if(length(pt,relative) > 1.0) {
        bezier_recursive(tfrom,tmiddle,pt,points);
        push(points,pt);
        bezier_recursive(tmiddle,tto,pt,points);
    }
}
void bezier_递归(双tfrom、双tto、点相对、列表点)
双tmiddle=0.5*(tfrom,tto));
点pt=贝塞尔(tmiddle);
if(长度(pt,相对)>1.0){
bezier_递归(tfrom、TMIDLE、pt、点);
推力(点,pt);
bezier_递归(TMIDLE、tto、pt、点);
}
}

结果,你会得到一组点,你可以把这些点画成一系列的线。

我简单地用圆作为点,半径很小

我正在使用:

svg_document = svgwrite.Drawing(filename = "test-svgwrite.svg", size = ("800px", "600px"))

def draw_pixel(x,y,r,g,b):
    svg_document.add(svg_document.rect(insert = (x, y), size = ("1px", "1px"), fill = "rgb(%.0f,%.0f,%.0f)" % (r, g, b)))

你说的计算和绘图是什么意思?像cairo这样的工具可以自己绘制曲线。你不必自己画曲线来做窗帘后面的计算…我在玩贝塞尔曲线,我想用svgwrite来画它们。实际上,我正在这样做,但我不能只画一个像素,我用直线,起点=x,终点=x+1。画贝塞尔曲线是一个递归过程。您可以检查开始点和停止点之间的长度差是否接近1,而不是在某个级别(在调用堆栈中)停止。很抱歉,我不知道这对我有什么帮助。通过绘制短的连接线段,您将获得更好的外观。SVG是面向向量的,与设备无关,因此不存在设备像素的概念——所有标记都有一个大小。如果您真的想这样做,您可以创建一个光栅图像文件并显示它。谢谢!但是我已经编写了计算点的函数,我甚至可以画它们,但是用细线代替点或像素是很难看的。这可能是因为svgwrite不是基于像素的。Svg是基于矢量的,这意味着没有像素。当你画一个圆时,你只说“画一个半径为a的圆”,如果你使用矢量屏幕,你会得到一个“完美”的圆,一些打印机也不使用像素的概念。您应该考虑使用另一个库来“绘制”像素。您还可以通过首先将“笔画宽度”设置为小值(当然,您不能真正指定一个像素,参见)和 LeCeCAP样式到<代码>圆< /代码>来绘制圆。之后,您可以在希望点出现的任何位置绘制零长度路径段。