gpt4 book ai didi

php - 如何沿圆周获取像素

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:26 25 4
gpt4 key购买 nike

我想获取图像圆周上的像素值,并绘制它们。我知道 Circumference 是 C=2*pi*radius,但我不确定如何遍历一个圆中的所有点来获取像素数据。

要获得单个像素,这会起作用。但我需要沿圆周获取像素值。我应该如何遍历以获取该数据?

$pixel=getPixel($image, $x, $y);

最佳答案

在这里查看答案 3D sphere boundary

它是 3D 等同于您的问题,因此它可能会有所帮助,但如果您还需要正确的像素顺序,那么这很可能不适合您。

如果你想要速度,请使用 Bresenham

但是对于新手来说可能很难实现,更难理解

如果您想要简单(或开始),那么:

  1. 使用参数圆方程

    x=x0+r*cos(t)
    y=y0+r*sin(t)

    这让你得到圆边界的像素位置,而 t= <0,2*pi) [rad]使用 degrad根据你的sin,cos功能

  2. 仅像素

    圆周长为2*pi*r [pixels]所以参数t的步骤应该足够小以达到尽可能多的点

    dt <= 2*pi/2*pi*r // whole circle / number of pixels
    dt <= 1/r // let use half of that for safety

    所以要提取点,请使用此 C++ 代码:

        int x0=...,y0=...,r=...; // input values
    int xx=x0+r+r,yy=y0,x,y;
    double t,dt=0.5/r;
    for (t=0.0;t<2.0*M_PI;t+=dt)
    {
    x=x0+int(double(double(r)*cos(t)));
    y=y0+int(double(double(r)*sin(t)));
    if ((xx!=x)&&(yy!=y)) // check if the coordinates crossed pixel barrier
    {
    xx=x; yy=y;
    // here do what you need to do with pixel x,y
    }
    }

    如果周边有洞,则降低 dt更多的。它越少,你使用的步骤就越小,但它也会减慢整个过程。你可以有 r作为double或者有它的副本来避免 2 int/double转换。 xx,yy是最后使用的像素坐标,以避免多次处理单个像素。开始时,为安全起见,设定点不在圆圈内。如果r==0那么你应该设置dt一些安全值,如 dt=M_PI;

关于php - 如何沿圆周获取像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25800367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com