画线之逐点比较法
来源:互联网 发布:美国与伊朗关系知乎 编辑:程序博客网 时间:2024/06/06 09:49
这个学期,专业开设了<计算机图形学>.用的是清华唐泽圣的书。今天刚学了逐点比较法,书上只是分别讨论了各象限线的增量计算公式。作为练习,我用编程实现了一下。相信这是无数学过这门课的同学都做过的事情。
所谓象限,应该是把直线看作向量,将它们起点平移到坐标原点,然后根据走向便可划分出不同象限的直线。
如上图所示:给出了在屏幕坐标系下,按书上所说的四种象限的直线。线i对应第i个象限(1<=i<=4)。然后就能套用书上的关于偏差运算的公式来生成各个象限的直线。
下面给出我的源代码,用的是TC2.0。改天再试着用Java实现一下,因为我们老师说Tc2.0中的颜色太少了,要学着用其他语言实现书上的算法。有什么不足之处,请各位大侠多多指点。
#include<graphics.h>
#include<math.h>
#include<stdio.h>
int sign(int a){
if( a < 0) return -1;
return a != 0;
}
void drawLine(int x1,int y1,int x2,int y2){
int xt,yt;
int F,n,i;
int num;
int xSign,ySign;
x2 -= x1; xSign = sign(x2);
y2 -= y1; ySign = sign(y2);
num = xSign * ySign;
F = 0;
putpixel(x1,y1,RED);
xt = x1,yt = y1;
n = abs(y2) + abs(x2);
for(i = 0; i < n ;i++){
if(F>=0){
if(num > 0){
F -= abs(y2);
xt += xSign;
}
else{
F -= abs(x2);
yt += ySign;
}
}
else{
if(num>0){
yt += ySign;
F += abs(x2);
}
else{
xt += xSign;
F += abs(y2);
}
}
putpixel(xt,yt,RED);
}
}
int main(){
int gd = DETECT,gm;
int x1,y1,x2,y2;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
do{
printf("x1 = ");scanf("%d",&x1);
if(x1<0) break;
printf("y1 = "); scanf("%d",&y1);
printf("x2 = "); scanf("%d",&x2);
printf("y2 = "); scanf("%d",&y2);
drawLine(x1,y1,x2,y2);
}while(1);
return 0;
}
- 画线之逐点比较法
- 逐点比较法
- 逐点比较法画圆(opengl)
- 直线生成算法---逐点比较法
- opengl逐点比较法绘直线
- 逐点比较法生成直线,计算机图形学实验。
- C语言之比较法
- 自己做的一个读取DXF并将图形转换成点(逐点比较法)输出的控件
- GoogleMap API for iOS 使用 之 动点画线
- android开发之使用shape来画线,有一些注意点
- android开发之使用shape来画线,有一些注意点
- vc 画点 画线
- python 点到点画线
- 点画线模式实例
- openlayers3画线画点
- 汇编---画点+画线
- MapX画线画点代码
- C# 画点画线写字
- 如何连接oracle数据库及故障解决办法-总结
- 盖茨十条成功箴言 值得一生铭记(组图)
- JSP第二章
- JSP第三章
- VC++编程实现广告窗口自动关闭
- 画线之逐点比较法
- 史上最伟大五位黑客罪犯,都从监狱放出来了(转载)
- 关于c#里的lock关键字的用法
- JSP第五章
- MySQL服务器配置
- 使用ASP.net2.0中的URL映射技术改变网址
- MySQL不能从远程连接的一个解决方法
- Linux Signal (8): sigsetjmp和siglongjmp
- 三十几岁才总结出来的15条家庭消费经验