CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

有关位运算的奇怪问题

楼主donghaish(roland)2006-03-15 17:55:21 在 C/C++ / C语言 提问

最近上图形学,想写一个自己的图形库,用bresenham算法写了一个line函数,然后优化了一下,很简单,就是把2*dy--->dy<<1,但是奇怪的是没优化之前画线是很正确的,但优化之后就不对了.  
  下面是代码,/**/里的是我没优化的:  
   
  void   line(int   x1,int   y1,int   x2,int   y2,BYTE   color)/*最终优化的画线算法*/  
  {  
          int   i,x,y,d1,d2,dx,dy,dxabs,dyabs,sdx,sdy;  
   
          dx=x2-x1;dy=y2-y1;  
          dxabs=abs(dx);dyabs=abs(dy);  
   
          d1=2*dyabs-dxabs;/*   for   m<1   */  
          d2=2*dxabs-dyabs;/*   for   m>1   */  
   
          sdx=sgn(dx);sdy=sgn(dy);/*for   start   point's   value   lower   than   end   point*/  
   
          x=x1;y=y1;  
   
          put_pixel(x,y,color);  
   
          if(dxabs>=dyabs){  
                  x+=sdx;  
                  for(i=0;i<dxabs;i++){  
                          if(d1<0)  
                                  d1+=dy<<1;/*   d1+=2*dy;   */  
                          else{  
                                  y+=sdy;  
                                  d1=(dy-dx)<<1;/*   d1+=2*(dy-dx);   */  
                          }  
                          put_pixel(x,y,color);  
                  }  
          }  
          else{  
                  for(i=0;i<dyabs;i++){  
                          y+=sdy;  
                          if(d2<0)  
                                  d2+=dx<<1;/*   d2+=2*dx;   */  
                          else{  
                                  x+=sdx;  
                                  d2=(dx-dy)<<1;/*   d2+=2*(dx-dy);   */  
                          }  
                          put_pixel(x,y,color);  
                  }  
          }  
  }  
   
  还有,我曾经测试过类似x=y<<1的位运算,他不改变y的值,也就是说假设y=3,执行x=y<<1后,x=6,y=3 问题点数:100、回复次数:4Top

1 楼donghaish(roland)回复于 2006-03-15 18:04:16 得分 0

不好意思,我自己顶一个,我过会就回学校了,急啊!Top

2 楼ykzhujiang(朱朱)回复于 2006-03-15 18:20:45 得分 100

y<<1当然不改变y的值  
  就像a+b不改变a和b是一个道理  
  你上面写得有些问题是因为原来是+=  
  应该改成d2=d2+(dx-dy)<<1  
  注意看一下,else里面那个,估计是你当时疏忽了Top

3 楼minsavage(帆野)回复于 2006-03-15 18:32:29 得分 0

楼上正解   d1+=dy<<1   应该改为   d1   +=   (dy   <<=   1)  
  这样应该就没问题了  
  楼主如果用VC的话   可以按F10单步跟踪一下   看看变量的值就应该知道为什么了Top

4 楼donghaish(roland)回复于 2006-03-15 18:38:18 得分 0

to   ykzhujiang(朱朱):  
  哈哈,谢谢,真不好意思.我看了半天没看出来,太粗心了:)  
  Top

相关问题

  • 有关运算
  • 有关按位运算符>>>的问题。
  • 一个有关位运算的问题
  • 有关位运算的一则问题
  • Delphi里面的位运算很奇怪耶。大家看看
  • 位运算
  • 位运算
  • 位运算
  • 位运算符?
  • 有关运算符重载

关键词

  • 图形
  • sdx
  • sgn
  • dy
  • point

得分解答快速导航

  • 帖主:donghaish
  • ykzhujiang

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo