Content originally posted in LPCWare by Dave on Tue Jul 19 11:58:09 MST 2011
Here's another function to play with in SWIM.
random circles...
Have fun...
-Dave
<code>
/***********************************************************************************************
**
**
***********************************************************************************************/
void plot4points( SWIM_WINDOW_T *win, INT_32 cx, INT_32 cy, INT_32 x, INT_32 y, INT_32 Filled )
{
INT_16 x0, x1, y0, y1;
y0 = cy + y;
y1 = cy - y;
if( Filled )
{
for( x0=cx - x; x0<=cx + x; x0++ )
{
*(win->fb + x0 + (y0 * win->xpsize)) = win->pen;
*(win->fb + x0 + (y1 * win->xpsize)) = win->pen;
}
}
else
{
x0 = cx + x;
x1 = cx - x;
*(win->fb + x0 + (y0 * win->xpsize)) = win->pen;
if (x != 0)
*(win->fb + x1 + (y0 * win->xpsize)) = win->pen;
if (y != 0)
*(win->fb + x0 + (y1 * win->xpsize)) = win->pen;
if (x != 0 && y != 0)
*(win->fb + x1 + (y1 * win->xpsize)) = win->pen;
}
}
/***********************************************************************************************
**
**
***********************************************************************************************/
void plot8points( SWIM_WINDOW_T *win, INT_32 cx, INT_32 cy, INT_32 x, INT_32 y, INT_32 Filled )
{
plot4points( win, cx, cy, x, y, Filled );
if (x != y)
plot4points( win, cx, cy, y, x, Filled );
}
/***********************************************************************************************
**
**
***********************************************************************************************/
void swim_put_circle( SWIM_WINDOW_T *win, INT_32 cx, INT_32 cy, INT_32 radius, INT_32 Filled )
{
INT_32 Error = -radius;
INT_16 x = radius;
INT_16 y = 0;
while( x >= y )
{
plot8points( win, cx, cy, x, y, Filled );
Error += y;
++y;
Error += y;
if( Error >= 0 )
{
--x;
Error -= x;
Error -= x;
}
}
}
/***********************************************************************************************
**
**
***********************************************************************************************/
void lcd_randomcircles( void )
{
SWIM_WINDOW_T win1;
INT_32 WinWidth, WinHeight;
COLOR_T *fblog;
INT_32 RADIUS;
/* Set LCD frame buffer address */
fblog = (COLOR_T *)SDRAM_BASE_ADDR;
/* Create a SWIM window */
swim_window_open(&win1, LCD_DISPLAY->iHorizontalPixelsPerLine,
LCD_DISPLAY->iVerticalLinesPerPanel, fblog, 0, 0,
(LCD_DISPLAY->iHorizontalPixelsPerLine - 1),
(LCD_DISPLAY->iVerticalLinesPerPanel - 1),1, WHITE, BLACK, BLACK);
WinWidth = win1.xpsize;
WinHeight = win1.ypsize;
while( 1 )
{
RADIUS = rand()%50 + 15;
swim_set_pen_color(&win1, (COLOR_T)(rand()%NUM_COLORS));
swim_put_circle( &win1, rand()%(WinWidth-RADIUS*2)+RADIUS, rand()%(WinHeight-RADIUS*2)+RADIUS, RADIUS, 1);
}
}
</code>