0
\$\begingroup\$

Hello I've been trying for ages to make a pixel circle using the putpixel function provided by SDL main website here is that function :

void putpixel(int x,int y , int color , SDL_Surface* surface)
{
    unsigned int *ptr = static_cast <unsigned int *> (surface->pixels);

    int offset = y * (surface->pitch/sizeof(unsigned int));

    ptr[offset + x] = color;
}

and my question is how do I curve a line or create an circle arc of pixels or any other curved shape then a rectangle or singular pixel or line.

for example here are some pictures

filled pixel circle below enter link description here

now my idea was too

change the x and y value of the pixel position using + and - to create the curves but in practice didn't provide the correct results

what my results are in this is to be able to create a circle that is made out of pixels only nothing else.

thank you for anyone who takes the time to read this question

thanks! :D

\$\endgroup\$
0

3 Answers 3

1
\$\begingroup\$

To draw a circle one pixel at at time, you can do something like this

int centrex=100,centrey=100;// centre of circle in pixel coords
int radius=50;

float two_pi=6.283f;

float angle_inc=1.0f/radius;
for(float angle=0.0f; angle<= two_pi;angle+=angle_inc){
    xpos=centrex+radius*cos(angle);
    ypos=centrey+radius*sin(angle);
    putpixel(x,pos,ypos,surface);

}

This method considers a circle like a bicycle wheel and draws a pixel at the end of each spoke. This is not the most efficient way to draw a circle using pixels (checkout the midpoint algorithm). But it will get you started.

\$\endgroup\$
1
  • \$\begingroup\$ I approve this message. Start with something you understand (like what Ken suggests for circles, or y = Ax+B for straight line segments), and then learn the "real" algorithms (e.g. Bresenham) \$\endgroup\$
    – ggambetta
    Dec 13, 2012 at 9:41
0
\$\begingroup\$

For curves you can use Bezier Curve. The parametric equation is what you are looking for ;)

Using Bezier Curves, you can draw lines too, all you have to do is use the Linear Bezier Curve.

For circles, you can also use parametric equations, and a quick Google returned me this awesome website: Link!.

But one can also use something like Midpoint Circle for filled circles. See this question: https://stackoverflow.com/questions/1201200/fast-algorithm-for-drawing-filled-circles

\$\endgroup\$
0
\$\begingroup\$

Read up on Bresenham's algorithms. First here for a line drawing algorithm, and once you understand how that works here for the actual circle algorithm.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .