gpt4 book ai didi

c - Bresenham 的画线算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:22 25 4
gpt4 key购买 nike

我编写了这段代码。这段代码处理 dx 和 dy 大于 0 的情况。但是当其中一个小于 0 时该怎么办。算法说 m 应该作为绝对值,x 和 y 应该递减。但是如何在第二个 for 循环中递减 i(x)?

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <graphics.h>

void illuminate (int x, int y, int col)
{
putpixel(x+320,240-y,col);
}


void main (void)
{
int i,x1,y1,x2,y2,j;
float dx,dy,m,e;
int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode, "C:\\TurboC3\\BGI");
printf("\nEnter the coordinates of initial point\n");
scanf("%d%d",&x1,&y1);
printf("\nEnter the coordinates of final point\n");
scanf("%d%d",&x2,&y2);

dx = x2 - x1;
dy = y2 - y1;
m = abs(dy)/abs(dx);
j = y1;
e = m - 1;

line(320,0,320,480);
line(0,240,640,240);

if ( dx >= 0 && dy >= 0 )
{
for (i=x1;i<x2-1;i++)
{
illuminate(i,j,4);
if ( e>= 0 )
{
j = j+1;
e = e-1.0;
}
e = e+m;
}
}
else
{
for (i=x1;i<x2-1;i++)
{
illuminate(i,j,4);
if (e>=0)
{
j = j-1;
e = e-1.0;
}
e = e+m;
}
}
getch();
}

最佳答案

处理这种情况的一种简单方法是在某个容器中“绘制”直线相对于 x 轴的镜像,然后再次镜像。您实际上不必这样做,但这种思维方式可能会帮助您确定应该在哪里进行否定。 dx 为正或负时的代码非常相似,仅在几个符号上有所不同。

关于c - Bresenham 的画线算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com