|
本帖最后由 舞指飞扬 于 2020-4-22 00:29 编辑
主要是应用计算机图形学的Bresenham算法在"基本图形"0E单色位图 的应用
所有的绘图函数没用浮点运算因此能保证速度和避免数值计算溢出
void Bresenham(int x1, int y1, int x2, int y2,u8 color1) //端点,端点,颜色
{
int x, y, dx, dy, p1, i;
int maxer=0,miner=0;
dx = x2 - x1;
dy = y2 - y1;
if (abs(dx) > abs(dy)) //斜率绝对值在(0,1),步进方向为x轴
{
if (x1 < x2) //默认画点从左往右画
{
x = x1;
y = y1;
}
else
{
x = x2;
y = y2;
}
putpixel(x + x0, y0 - y, color1);
p1 = 2 * abs(dy) - abs(dx); //计算初始pi的值
if (x1>=x2){maxer=x1;miner=x2;}else{maxer=x2;miner=x1;}
for (i = miner; i < maxer; i++)
{
x = x + 1;
if (p1 >= 0)
{
if (dx*dy >= 0)
y = y + 1;
else
y = y - 1; //若Pi>=0,y(i+1)=y(i)±1
p1 = p1 + 2 * (abs(dy) - abs(dx)); //更新pi
}
else
{
y = y; //若Pi<0,y(i+1)=y(i)
p1 = p1 + 2 * abs(dy); //更新pi
}
putpixel(x + x0, y0 - y,color1);
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|