直线方程

bresenham直线算法

烂漫一生 提交于 2020-03-08 06:55:48
思路很明了的一个算法,没有中点划线法那么绕(我需要小心的判断_2Fm>0意味着什么)。 基本原理从某处摘得: 设直线方程为 y i+ 1 = y i + k ( x i+ 1 - x i )+ k 。假设 列坐标象素已经确定为 x i ,其行坐标为 y i 。那么下一个象素的列坐标为 x i + 1 ,而行坐标要么为 y i ,要么递增 1 为 y i + 1 。是否增 1 取决于误差项 d 的值。误差项 d 的初值 d 0 = 0 , x 坐标每增加 1 , d 的值相应递增直线的斜率值 k ,即 d = d + k 。一旦 d ≥1,就把它减去 1 ,这样保证 d 在 0 、 1 之间。当 d ≥ 0.5 时,直线与垂线 x = x i + 1 交点最接近于当前象素( x i , y i )的右上方象素 ( x i + 1 , y i + 1 );而当 d <0.5 时,更接近于右方象素( x i + 1 , y i )。为方便计算,令 e = d - 0.5 , e 的初值为- 0.5 ,增量为 k 。当 e ≥ 0 时,取当前象素( x i , y i )的右上方象素( x i + 1 , y i + 1 );而当 e <0 时,取( x i , y i )右方象素( x i + 1 , y i )。 上面这段叙述很见功底,是有中国特色的教授式描述,不要图就能明白

直线扫描转换-DDA算法

醉酒当歌 提交于 2020-03-08 06:54:02
直线扫描转换-DDA算法 直线段的扫描转换算法 已知两个点,求直线。 为了在光栅显示器上用这些离散的像素点逼近这条直线,需要知道这些像素点的x,y坐标。 求出过P0,P1的直线段方程: y=kx+b k=(y1-y0)/(x1-x0) 假设x已知,即从x的起点x0开始,沿x方向前进一个像素(步长= 1),可以计算出相应的y值。 因为像素的坐标是整数,所以y值还要进行取整处理。 如何把数学上的一个点扫描转换一个屏幕像素点? p(1.7,0.8) ->(1,0) p(1.7,0.8) +0.5->(2.2,1.3) p(2.2,1.3) ->(2,1) 直线是最基本的图形,一个动画或真实感图形往往需要调用成千上万次画线程序,因此直线算法的好坏与效率将直接影响图形的质量和显示速度。 为了提高效率,把计算量减下来,关键问题就是如何把乘法取消. 1、数值微分法(DDA) 2、中点画线法 3、Bresenham算法 数值微分DDA(Digital Differential Analyzer)法 引进图形学中一个很重要的思想---增量思想 y i =kx i +b y i+1 =kx i+1 +b =k(x i +1)+b =kx i +k+b =kx i +b+k =y i +k y i+1 =y i +k 这个式子的含义是:当前步的y值等于前一步的y值加上斜率k

数职三年级

时间秒杀一切 提交于 2020-03-04 12:30:06
文章目录 3月5日 本节课学习任务 知识点 课堂练习 课后作业 3月5日 本节课学习任务 直线的方程习题课,看视频讲解 完成下面的练习题,拍照上交 完成学习通里的作业 知识点 1、直线的斜率 k = tan ⁡ α ( α ≠ 90 ° ) k=\tan \alpha (\alpha \neq 90°) k = tan α ( α  ​ = 9 0 ° ) $ k=\frac{y_2-y_1}{x_2-x_1}(x_1 \neq x_2 )$ 2、直线方程 (1)点斜式: y − y 0 = k ( x − x 0 ) y-y_0=k(x-x_0) y − y 0 ​ = k ( x − x 0 ​ ) (2)斜截式: y = k x + b y=kx+b y = k x + b (3)一般式: A x + B y + C = 0 Ax+By+C=0 A x + B y + C = 0 ( A A A 、 B B B 不同时为 0 0 0 ) 3、两条直线平行 l 1 ∥ l 2    ⟺    k 1 = k 2 , b 1 ≠ b 2 l_1 \parallel l_2 \iff k_1 = k_2,b_1 \neq b_2 l 1 ​ ∥ l 2 ​ ⟺ k 1 ​ = k 2 ​ , b 1 ​  ​ = b 2 ​ 或 k 1 , k 2 k_1,k_2 k 1 ​

高等代数笔记4:线性空间

旧巷老猫 提交于 2020-03-03 05:19:15
线性空间 线性空间的定义与实例 从本节开始,我们将解析几何、向量空间、矩阵空间的一些共同性质作一个进一步的抽象,得到线性空间的概念。所谓线性空间,就是在一个集合上,定义了线性运算,从而形成线性空间。所谓线性运算,就是两类:加法和数域 K K K 上的数乘。回顾解析几何、向量空间、矩阵空间的相关知识,在这些空间上,都定义了加法和数乘,并且加法和数乘都有类似的性质,即以下八条: A.加法交换律: a + b = b + a a+b=b+a a + b = b + a B.加法结合律: a + b + c = a + ( b + c ) a+b+c=a+(b+c) a + b + c = a + ( b + c ) C.存在零元: 0 + a = a 0+a=a 0 + a = a D.存在相反元: a + ( − a ) = 0 a+(-a)=0 a + ( − a ) = 0 E.数乘结合律: ( k l ) a = k ( l a ) (kl)a=k(la) ( k l ) a = k ( l a ) F. 1. a = a 1.a =a 1 . a = a G.数乘分配律1: ( k + l ) a = k a + l a (k+l)a=ka+la ( k + l ) a = k a + l a H.数乘分配律2: k ( a + b ) = k a + k b k(a+b)

计算几何

醉酒当歌 提交于 2020-02-27 09:13:57
矢量的概念 :如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。 矢量加减法 :设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 ),则矢量加法定义为: P + Q = ( x1 + x2 , y1 + y2 ),同样的,矢量减法定义为: P - Q = ( x1 - x2 , y1 - y2 )。显然有性质 P + Q = Q + P,P - Q = - ( Q - P )。 矢量叉积 :计算矢量叉积是与直线和线段相关算法的核心部分。设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积,即:P × Q = x1*y2 - x2*y1,其结果是一个标量。显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。一般在不加说明的情况下,本文下述算法中所有的点都看作矢量,两点的加减法就是矢量相加减,而点的乘法则看作矢量叉积。 【叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系】 1)若 P × Q > 0 , 则P在Q的顺时针方向。 2)若 P × Q < 0 ,

计算机图形学——直线扫描转换(基本光栅图形算法)

假装没事ソ 提交于 2020-02-20 04:43:53
一、直线生成基本思路 图形图像是由屏幕上不同亮度不同颜色的光点(像素)组成。在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。 所以:对直线进行光栅化的时候,只能在显示器所给定的有限个像素组成的点阵中确定最佳逼近于该直线的一组像素,用这些像素表示该直线。 所以:生成直线的主要工作是:快速找出距离直线最近的网格点,用这些网格点对应的像素表示该直线。 如果我们使用斜截式方程来表示直线,会用到一次乘法和一次 加法,在计算机底层乘法是费时的,那么有什么方法可以改进? 变乘法为加法! 直线是象素集合,生成算法的最终目的,就是为了寻找能更准确逼近直线的象素点。 所以,要确定直线上每个点,那么,如:m<1时,从起始点xs,xs+1, xs+2, xs+3 ……到xe的每个点(xi,yi) ,需要确定其对应的象素值。 所以,每一个(xi,yi)即准确值,都要寻找对应其的象素值(xi,yi,r),即,最接近其准确值的整数值,最简单-取整 。 假设(xi,yi)已经确定了它的对应整数象素点,则下面就要找个规则确定下一个点即(xi+1, yi+1)的对应象素点。 对应于上述情况,即m<1的情况, xi+1=xi+1,即yi+1需要确定,即需要确定上述说的准则,即给定一个判定式,由判定式来确定yi+1的选择。 而判定式为了计算方便也可以有更简便的方式来计算

光栅图形学——直线段的扫描转换算法

馋奶兔 提交于 2020-02-20 04:42:51
数学上的直线是没有宽度、由无数个点构成的集合,显然,光栅显示器只能近地似显示直线。当我们对直线进行光栅化时,需要在显示器有限个象素中,确定最佳逼近该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作,这个过程称为用显示器绘制直线或 直线的扫描转换 。 一、数值微分(DDA)算法 1、算法原理 根据直线方程y=kx+b,由两个直线的端点(x0,y)(x1y1)可求得斜率k。可以将变量x设定初值为x0,y初值y0。每次x步进1,同时使y步进k,可获得表示直线的所有近似的结果集。 2、算法实现 //数值微分法 void DrawLine(CDC * pDC,int x0,int y0,int x1,int y1,COLORREF color) { int x; float y,k; k = (float)(y1-y0)/(x1-x0); y = (float)y0; for (x=x0;x<x1;x++) //每次x步进1 { y += k; //每次y增量为k pDC->SetPixel(x, (int)(y+0.5), color); //每次对y的值四舍五入 } } 3、补充 这个算法只适合|k|<=1的情况。在|k|>1时,必须交换x和y的位置,y每增加1,x增加1/k。 在这个算法中,y和k必须用浮点数来表示,每一步都要对y进行四舍五入后取整,不利于机器实现 二、中点划线法

CG-光栅图形学直线扫描转换算法-学习笔记

佐手、 提交于 2020-02-20 04:41:29
一、直线扫描转换算法——DDA画线算法 备注:DDA(Digital Differential Analyzer) ---> 数值微分法 1. 引进图形学中的一个很重要的思想——增量思想 2. 算法原理 采用直线的斜截式方程进行推理,坐标系为光栅像素坐标系,可用坐标仅为整数坐标点。 y i = kx i + b y i+1 = kx i+1 + b = k (x i + 1) + b = kx i + k + b = kx i + b + k = y i + k 由以上两式得: y i+1 = y i + k (当前步的Y值等于前一步的Y值加上斜率) 目的:将原来的 乘法和加法变成了一个加法 ! 3. 示例 用DDA扫描转换连接两点P 0 (0,0)和P 1 (5,3)的直线段 1° 计算斜率 k = 0.6 < 1 2° 根据公式 y i+1 = y i + k 计算趋近的像素坐标点: 【注意】此处Y加上0.5是做了四舍五入的处理,减少误差! 二、直线扫描转换算法——中点画线算法 改进: 将DDA中的浮点运算变成整数加法 ! 1. 引入直线的一般式方程: F(x,y)= 0 ----> Ax + By + C = 0 其中: A = -(∆y);B = (∆x);C = -B( ∆x ); 2. 基本数学知识: 1° 对于直线上的点: F(x,y)= 0 2° 对于直线上方的点:

自我高数学习笔记——知识点

妖精的绣舞 提交于 2020-02-19 22:00:40
高数学习笔记 第七章 向量代数与空间解析几何 本章难点 1、数量积、向量积的运算; 2、平面方程和直线方程及其求法; 3、平面与平面、直线与直线、平面与直线之间相互位置关系的判定; 4、二次曲面图形; 5、旋转曲面的方程。 本章内容 一、空间直角坐标系及向量 (一)空间两点间的距离 设空间有两点,坐标为 P 1 ( x 1 , y 1 , z 1 ) , Q ( x 2 , y 2 , z 2 ) P_1(x_1,y_1,z_1),Q(x_2,y_2,z_2) P 1 ​ ( x 1 ​ , y 1 ​ , z 1 ​ ) , Q ( x 2 ​ , y 2 ​ , z 2 ​ ) ,有: ∣ P 1 P 2 → ∣ = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 + ( z 2 − z 1 ) 2 |\overrightarrow{P_1P_2}|=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2+(z_2-z_1)^2} ∣ P 1 ​ P 2 ​ ​ ∣ = ( x 2 ​ − x 1 ​ ) 2 + ( y 2 ​ − y 1 ​ ) 2 + ( z 2 ​ − z 1 ​ ) 2 ​ 任意一点 M ( x , y , z ) M(x,y,z) M ( x , y , z ) 到原点 O ( 0 , 0 , 0 ) O(0,0,0) O (

在几何画板上画椭圆可以根据椭圆第二定义

早过忘川 提交于 2020-02-17 13:24:29
几何画板作为初高中几何学习中必不可少的辅助工具,可以用来画几何图形,比如椭圆。在几何画板中画椭圆的方法有很多种,前面的教程中给大家介绍了用椭圆第一定义画椭圆、利用菱形画椭圆、借助椭圆参数方程画椭圆等等构造椭圆的方法,其实椭圆还有第二定义,也可以借助此定义来画椭圆,下面本 几何画板教程 就来给大家介绍一下几何画板中用椭圆第二定义画椭圆的方法。 椭圆的第二定义:设动点M(x, y)与定点F(c, 0)的距离和它到定直线l: x=a 2 /c的距离的比是常数(a>c>0),则点M的轨迹是椭圆。点F是椭圆的一个焦点,直线l是椭圆中对应于焦点F的准线。常数e=c/a(0<e<1)是椭圆的离心率。 <h4="">具体的操作步骤如下: 步骤一 打开几何画板,使用“点工具”画任意一点F,使用“线工具”画直线L(点F不在L上)。过点F作一条直线,在直线上取一点P; 在几何画板中画直线示例 步骤二 选中点F、P执行“度量”——“距离”命令,度量FP的长度;选中点F和度量的FP的长度,执行“构造”——“以圆心和半径绘圆”构造以点F为圆心,FP为半径的圆。新建参数e=0.8(可改为其他小于1的正数),计算FP/e的值; 在几何画板中画圆F示例 步骤三 过点P作直线L的垂线,交直线L与点M;以M为圆心,FP/e的值为半径作圆,交垂线于N点,过N作直线L的平行线,交圆F于A、B两点; 在几何画板中画圆M示例