[A89] Re: filling ellipses
[Prev][Next][Index][Thread]
[A89] Re: filling ellipses
It DOES work correctly, and does not test every pixel; it draws lines across when it gets done. I
agree though, it is slow.
jeff
> Now, as for why the "formula" algorithm is a very, very poor (and very
> slow!) solution:
>
> 1.) It tests each pixel individually. Other algorithms have no need to do
> this, and compared to them you're looping through an absurd number of times.
> I see that you're taking advantage of the symmetry to only test 1/4 of the
> pixels, but that's still excruciatingly slow.
>
> 2.) It relies heavily on multiplication and division. Much of computer
> science revolves around circumventing those operations, since they are two
> of the slowest operations a computer needs to perform. The beauty of the
> Bresenham ellipse algorithm is that really only requires two
> multiplications, total (the multiplications by powers of two will be
> converted into bit shifts, and are therefore not multiplication after
> compilation) and _no_ division. I would assume that TI uses this algorithm
> internally.
>
> 3.) It uses floating point operations. Once again, the other algorithms do
> not need this.
>
> While the code you have written will work with a modification or two, it is
> entirely the wrong approach and should be simply scratched.
>
>
> Now, IF you were to get the Bresenham ellipse algorithm that Olle pointed
> out to work -- you'd have to find another implementation, since the one Olle
> pointed out seems to have not worked when you tested it -- and IF you
> changed it to use lines, as was suggested, it STILL would not work with XOR!
> That's because, as long as you could have two horizontally or vertically
> adjacent pixels, then you're bound to have overlapping lines. Once again,
> XOR does not like overlap.
>
> You are then left with one solution -- draw the a solid ellipse in a buffer,
> then XOR it onto the screen, just as I suggested in the first place. And as
> long as you're doing that, you can the fast, working TIOS ellipse drawing
> routine.
>
> So, in the end, you're left with only one way to draw a reasonably fast,
> filled ellipse using XOR -- exactly what I suggested yesterday. I suggest
> you overcome your virtual screen stigma, since it's certainly more than easy
> enough to use them.
>
> As for XORing a VS onto the actual screen, that should be relatively simple:
>
> void xorScreens(void *VS) // I think this should work
> {
> unsigned long *VSptr = (unsigned long *)VS;
> unsigned long *screenptr = (unsigned long *)LCD_MEM;
> int i;
>
> for (i=0; i < (240/8*128)/sizeof(unsigned long); ++i)
> *(VSptr++) ^= *(screenptr++);
> }
>
> -Scott
>
>
>
__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail
http://personal.mail.yahoo.com/
References: