定义圆心,画圆,小于半径则显色。
更新圆心位置使其动起来
int main()
{
int midlex = 400;
int midley = 240;
int R = 50;
unsigned int *mem_p;
int x = midlex - R;
int y = midley - R;
int vx = 5; // 水平方向速度
int vy = 3; // 垂直方向速度
int lcd_fd;
lcd_fd = open(LCD_PATH, O_RDWR);
mem_p = (unsigned int *)mmap(NULL, 800 * 480 * 4,
PROT_READ | PROT_WRITE,
MAP_SHARED, lcd_fd, 0);
int count = 0; // 计数器
while (count < 10) // 循环10次
{
for (int i = 0; i < 800 * 480; ++i) // 清空屏幕
{
*(mem_p + i) = 0x00FFFFFF;
}
// 绘制圆形
for (int j = y; j < y + R * 2; ++j)
{
for (int i = x; i < x + R * 2; ++i)
{
int dx = i - midlex;
int dy = j - midley;
if (dx * dx + dy * dy <= R * R)
{
*(mem_p + j * 800 + i) = 0x00FF0000;
}
}
}
// 更新圆形位置
midlex += vx;
midley += vy;
x = midlex - R;
y = midley - R;
// 碰撞检测
if (midlex - R <= 0 || midlex + R >= 800)
{
vx = -vx;
count++; // 计数器加1
}
if (midley - R <= 0 || midley + R >= 480)
{
vy = -vy;
count++; // 计数器加1
}
}
munmap(mem_p, 800 * 480 * 4);
close(lcd_fd);
return 0;
}