计算机图形学考试-绘制一条任意线型和线宽的直线。
2016-12-28 22:26
399 查看
编程绘制一条任意线型和线宽的直线。(线型、线宽可由用户指定)
首先我们得了解一下线型和线宽的意思。
线型包括实线、虚线和点线等。线型的显示在扫描转换算法中可通过像素段的方法实现,即对各种虚线和点线,画线程序沿线路径输出一些实线段(划线),在每两个划线之间有一个空白段,划线和空白段的长度(像素数目)可用像素模板指定,像素模板是由数字0和1组成的串,它指出沿线路径哪些位置要置为前景色,哪些位置不变。例如模板11110000用来显示划线长度为4个像素、空白段为4个像素的虚线。
线宽选择的实现取决于输出设备的能力。常用的是线刷子和方刷子两种。线刷子的实现比较简单。假设直线斜率在【-1,1】之间,这时可以把刷子置成与x轴垂直的方向,刷子的中点对准直线一端点,然后让刷子中心往直线的另一端移动,即可刷出具有一定宽度的线。
下面是源代码
首先我们得了解一下线型和线宽的意思。
线型包括实线、虚线和点线等。线型的显示在扫描转换算法中可通过像素段的方法实现,即对各种虚线和点线,画线程序沿线路径输出一些实线段(划线),在每两个划线之间有一个空白段,划线和空白段的长度(像素数目)可用像素模板指定,像素模板是由数字0和1组成的串,它指出沿线路径哪些位置要置为前景色,哪些位置不变。例如模板11110000用来显示划线长度为4个像素、空白段为4个像素的虚线。
线宽选择的实现取决于输出设备的能力。常用的是线刷子和方刷子两种。线刷子的实现比较简单。假设直线斜率在【-1,1】之间,这时可以把刷子置成与x轴垂直的方向,刷子的中点对准直线一端点,然后让刷子中心往直线的另一端移动,即可刷出具有一定宽度的线。
下面是源代码
#include <stdio.h> #include <conio.h> #include <graphics.h> char xing[8]; void DDALine(int x0,int y0,int x1,int y1,int color,char* xing,int kuan) { int dx,dy,epsl,k,i,p=0; float xIncre,yIncre,x,y; dx = x1 - x0; dy = y1 - y0; x = x0; y = y0; if(abs(dx) > abs(dy)) epsl = abs(dx); else epsl = abs(dy); xIncre = (float)dx / (float)(epsl); yIncre = (float)dy / (float)(epsl); for(k = 0; k < epsl; k++) { if(xing[p] == '0') { p++; if(p == 8) p = 0; x += xIncre; y += yIncre; continue; } p++; if(p == 8) p = 0; if(y0 - y1 <= 0) for(i = 0; i < kuan; i++) { putpixel((int)(x + 0.5),(int)(y + 0.5 + i / 2),color); putpixel((int)(x + 0.5),(int)(y + 0.5 + i / 2),color); } else for(i = 0; i < kuan; i++) { putpixel((int)(x + 0.5 + i / 2),(int)(y + 0.5),color); putpixel((int)(x + 0.5 + i / 2),(int)(y + 0.5),color); } x += xIncre; y += yIncre; } } int main() { int gdriver,gmode; int q,w,e,r; int kuan; printf("E31414042 殷俊\n"); printf("请输入线宽和线型\n"); scanf("%d %s",&kuan,xing); printf("请输入端点坐标\n"); scanf("%d %d %d %d",&q,&w,&e,&r); gdriver = DETECT; initgraph(&gdriver,&gmode,""); DDALine(q,w,e,r,RED,xing,kuan); getch(); closegraph(); return 0; }
相关文章推荐
- 计算机图形学——绘制直线
- 计算机图形学-基于OpenGL的绘制直线及图形变换练习
- [置顶] 【计算机图形学】【加权区域采样】用加权区域采样的方法绘制反走样直线
- 计算机图形学-实验1-掌握开发环境配置方法和基本图元绘制函数
- 计算机图形学-----画直线
- 计算机图形学-绘制圆、椭圆
- 微信小程序例子——使用画布组件绘制一条长度为230px的水平直线
- c&OpenGL实现计算机图形学:双步绘制直线法绘制菱形
- 计算机图形学-基于OpenGL的绘制空间曲线
- [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(一)
- 计算机图形学——OpenGL学习系列之绘制3D下的小桌子
- OpenGL&nbsp;绘制字母&nbsp;计算机图形学
- 计算机图形学-基于OpenGL的绘制Bezier曲线
- 计算机图形学——生成直线的DDA算法
- 计算机图形学02一一OpenGL 代码实现绘制一条线
- [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)
- 计算机图形学-连续曲线绘制(可改变形状)
- 运用MATLAB绘制任意两点间的直线路径
- 【计算机图形学】DDA(数字微分分析仪)绘制线条
- 计算机图形学——绘制钻石图案