这个算法有点难,来看一看。

vvvvvvv 2003-10-09 12:02:16

能不能准确得到已知屏幕两点LineTo经过的像素坐标?

也就是说GDI的LineTo实现的原理是什么?
...全文
49 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cafeeee 2003-10-09
  • 打赏
  • 举报
回复
图形学的问题,可能是“中点XX算法”。
flaring 2003-10-09
  • 打赏
  • 举报
回复
好像没有这么简单的,因为只能取整数, 好像有一个比较快的专用算法,叫什么忘了
smch 2003-10-09
  • 打赏
  • 举报
回复
把x从x0逐步加1到x1,然后求解。
smch 2003-10-09
  • 打赏
  • 举报
回复
知道前后两点的坐标,然后不就是简单的算术问题吗?
a(x0,y0)
b(x1,y1)
c(x,y)
那么
(x-x0)/(y-y0)=(x1-x0)/(y1-y0)
y1=y0表示水平线
alphasun 2003-10-09
  • 打赏
  • 举报
回复
这个算法叫做DDA
会思考的草 2003-10-09
  • 打赏
  • 举报
回复
这个和计算机图形学有关的,关键是要看Windows画线采用的何种算法,譬如中点算法等等。
differ1 2003-10-09
  • 打赏
  • 举报
回复
是反走样吗?
spsheep2003 2003-10-09
  • 打赏
  • 举报
回复
我记得好像是一系列的头尾2点中的许多散点组成的直线~算法我到是真忘了。还是在大学是在图书馆见过。好像是一本c语言图形教材~好多基本的api的算法都有具体实现~
housisong 2003-10-09
  • 打赏
  • 举报
回复
>>能不能准确得到已知屏幕两点LineTo经过的像素坐标?

可以使用windowsAPI函数:LineDDA(); 可以从回调函数中得知哪些点将被绘制

>>也就是说GDI的LineTo实现的原理是什么?
有几种直线转化算法,比如:


template <class TPicture> //
void _line_fast(const TPicture& iter,int x0,int y0,int x1,int y1,value_type cValue)
{
int x_inc,y_inc;

int x =x0;
int y =y0;
int dx = x1-x0;
int dy = y1-y0;
if (dx>=0)
{
x_inc = 1;
}
else
{
x_inc = -1;
dx = -dx;
}

if (dy>=0)
{
y_inc = 1;
}
else
{
y_inc = -1;
dy = -dy;
}

int dx2 = dx + dx;
int dy2 = dy + dy;

if (dx > dy)
{
int error = dy2 - dx;
for (int index=0;index<dx;++index)
{
iter.set(x,y,cValue);
if (error >= 0)
{
error-=dx2;
y+=y_inc;
}
error+=dy2;
x+=x_inc;
}
}
else
{
int error = dx2 - dy;
for(int index=0;index<dy;++index)
{
iter.set(x,y,cValue);
if (error >= 0)
{
error-=dy2;
x+=x_inc;
}
error+=dx2;
y+=y_inc;
}
}
}



vvvvvvv 2003-10-09
  • 打赏
  • 举报
回复
能不能肯定是DDA?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧