DDA_为微分绘制直线算法

DDA_为微分绘制直线算法

  以步进坐标轴部长=1像素为单位,计算y=kx + b,绘制像素点(x, round(y)).

  即步进坐标增长1, 另一坐标增长K或者1/k。

  程序如下:

 1 //数值微分算法DDA
 2 void CCGProjectWorkView::DDA_Line(const int startPos[], const int endPos[], const float lineColor[])
 3 {
 4     glPushMatrix();
 5     //绘制直线
 6     long deltX, deltY, maxStep;
 7     deltX = endPos[0] - startPos[0];
 8     deltY = endPos[1] - startPos[1];
 9     maxStep = max(abs(deltX), abs(deltY));
10     //计算方向有向步进单位,即两个方向的斜率增长单位
11     float xStepUnion = float(deltX) / maxStep;
12     float yStepUnion = float(deltY) / maxStep;
13
14     glColor3f(lineColor[0], lineColor[1], lineColor[2]);
15     glBegin(GL_POINTS);
16
17     float x,y;//绘制的坐标点
18     x = (float)startPos[0];
19     y = (float)startPos[1];
20
21     //对两个方向循环步进处理
22     for (long i=1; i<=maxStep; i++)
23     {
24         x = x + xStepUnion;
25         y = y + yStepUnion;
26         glVertex3f((int)x, (int)y, 0);
27     }
28     glEnd();
29     glPopMatrix();
30 }
时间: 2024-10-11 00:44:41

DDA_为微分绘制直线算法的相关文章

用中点Bresenham画直线算法绘制任意斜率直线

使用VC 6.0 mfc实现编程 刚学的图像学,挺难学的,show 代码吧 void CLineView::OnDraw(CDC* pDC) { CLineDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int x1 ,x2 ,y1,y2 ; x1 = 0 ; y1 = 0 ;  x2 = 1000 ; y2 = 500 ; COLORREF c = RGB(25

Bresenham快速画直线算法

现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这里讲的是Bresenham的算法,是光栅化的画直线算法.直线光栅化是指用像素点来模拟直线,比如下图用蓝色的像素点来模拟红色的直线 给定两个点起点P1(x1, y1), P2(x2, y2),如何画它们直连的直线呢,即是如何得到上图所示的蓝色的点.假设直线的斜率0<k>0,直线在第一象限,Brese

[AlgorithmStaff] Bresenham快速直线算法

操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.3 | NativeC 最近在学习 Unity tilemap Brush 自定义笔刷功能时候,看到其直线笔刷 LineBrush 是采用 Bresenham 算法实现,故借此机会在这里记录下学习过程,并在最后给出完整实现. Introduction Bresenham 是光栅化的直线算法,或者说是通过像素来模拟直线.比如下图所示像素点来模拟红色的直线. 给定两个起点 P1(x1, y1) | P2

封装 用canvas绘制直线的函数--面向对象

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用面向对象的思想 封装 在canvas绘制直线的函数</title> 6 </head> 7 <body> 8 <canvas id="cv"></canvas> 9 &

2. Quartz2D 绘制直线

#import <UIKit/UIKit.h> @interface MyView : UIView @end #import "MyView.h" @implementation MyView -(void) drawRect:(CGRect)rect{ [self drawLine]; } #pragma mark - 绘图方法 #pragma mark 绘制直线 -(void) drawLine{ //提示:使用Ref声明的对象,不需要用* //1. 获取上下文 -

CALayer上绘制直线+position

/* 1. position:确定当前图层的锚点到父视图层坐标到原点的相对偏移量,在当前图层上找出锚点位置,将两者对齐 2. 绘制直线三部曲:创建可变路径(pathCreateMutable) : 添加到context(addPath) :开始绘制(drawPath) 途径阶段2:起始点确定,  属性设置(线宽和颜色) */

js 利用canvas绘制直线、曲线

<body> <!--画板--> // 当浏览器不支持的时候才会出现文字 <canvas id="canvas" style="background-color: black;">您当前的版本不支持 </canvas> <script type="text/javascript"> // 拿到画板 var canvas = document.getElementById('canvas'

CAD编辑器中怎么绘制直线

在日常的工作中,都是需要CAD绘图的,但是在刚刚了解CAD的小伙伴们来说绘制复杂的CAD图纸是有一定的困难的,先要从很简单的开始,那在CAD编辑器中怎么绘制直线?大家可不要觉得很简单哈,这也是有一定的难度的.那下面我们就一起来看看具体绘制的操作过程吧,不会操作的小伙伴们可以来看看,希望能够帮助到你们. 第一步:首先,将电脑进行打开,如果电脑中没有安装CAD编辑器.那就在电脑桌面上任意打开一个浏览器,在搜索框中搜索迅捷CAD编辑器,接着点击进入官网,点击下载安装最新版本的CAD编辑器. 第二步:接

绘制直线

实现效果: 知识运用: Graphics类中的DrawLine方法    其常用重载 public void DrawLine (Pen pen, Point pt1,Point pt2) //绘制一条连接两个Point结构的线 public void DrawLine (Pen pen,int x, int y,int x2,int y2) //连接由坐标指定的两个点的线条 实现代码: private void button1_Click(object sender, EventArgs e)