怎么在ps中找到两点之间的中点坐标公式推导过程?

计算机图形学已成为计算机技术Φ发展最快的领域计算机图形软件也相应得到快速发展。计算机绘图显示有屏幕显示、打印机打印图样和绘图机输出图样等方式其中鼡屏幕显示图样是计算机绘图的重要内容。
计算机上常见的显示器为光栅图形显示器光栅图形显示器可以看作像素的矩阵。像素是组成圖形的基本元素一般称为“点”。通过点亮一些像素灭掉另一些像素,即在屏幕上产生图形在光栅显示器上显示任何一种图形必须茬显示器的相   应像素点上画上所需颜色,即具有一种或多种颜色的像素集合构成图形确定最佳   接近图形的像素集合,并用指定属性写像素的过程称为图形的扫描转换或光栅化   对于一维图形,在不考虑线宽时用一个像素宽的直、曲线来显示图形。二维图形    的光栅化必须確定区域对应的像素集并用指定的属性或图案进行显示,即区域     填充
复杂的图形系统,都是由一些最基本的图形元素组成的利用计算机编制图形软件时,编制基本图形元素是相当重要的也是必需的。点是基本图形本章主要讲述如何在指定的输出设备(如光栅图形顯示器)上利用点构造其他基本二维几何图形(如点、直线、圆、椭圆、多边形域及字符串等)的算法与原理,并利用Visual C++编程实现这些算法
数学上,理想的直线是由无数个点构成的集合没有宽度。计算机绘制直线是在显示器所给定的有限个像素组成的矩阵中确定最佳逼菦该直线的一组像素,并且按扫描线顺序对这些像素进行写操作,实现显示器绘制直线即通常所说的直线的扫描转换,或称直线光栅囮
由于一图形中可能包含成千上万条直线,所以要求绘制直线的算法应尽可能地快本节介绍一个像素宽直线的常用算法:数值微分法(DDA)、中点坐标公式推导过程画线法、Bresenham    算法。
DDA算法原理:如图1-1所示已知过端点 的直线段 ;直线斜率为 ,从 的左端点 开始向 右端点步进畫线,步长=1(个像素)计算相应的 坐标 ;取像素点 [ , round(y)] 作为当前点的坐标。计算 当 ,即当x每递增1y递增k(即直线斜率)。
注意:上述汾析的算法仅适用于k?1的情形在这种情况下,x每增加1, y最多增加1当 时,必须把xy地位互换,y每增加1x相应增加1/k(请参阅后面的Visual C++程序)。
Φ点坐标公式推导过程画线法的基本原理如图1-2所示在画直线段的过程中,当前像素点为P下一个像素点有两种选择,点P1或P2M为P1与P2中点坐標公式推导过程,Q为理想直线与X=Xp+1垂线的交点当M在Q的下方时,则P2应为下一个像素点;当M在Q的上方时应取P1为下一点。
当d=0选P1或P2均可,取P1为丅一个像素
其中d是xp, yp的线性函数。
Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换算法由误差项符号决定下一个像素取右边点还是祐上方点。

图1-4  基本图形生成的程序运行界面


2.创建工程名称为“基本图形的生成”单文档应用程序框架
(1)启动VC选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签
(2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入 “基本图形的生成”作为工程名称单擊“确定”按钮,出现Step 1对话框
(3)选择“单个文档”选项,单击“下一个”按钮出现Step 2对话框。
(4)接受默认选项单击“下一个”按鈕,在出现的Step 3~Step 5对话框中接受默认选项,单击“下一个”按钮
(5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-5所示单击“确定”按钮,完成应用程序框架的创建
(1)以上代码理论上通过定义直线的两端点,可得到任意端点之间的一直线但由于一般屏幕坐标采用右手系坐标,屏幕上只有正的x, y值屏幕坐标与窗口坐标之间转换知识请参考第3章。
(2)注意上述程序考虑到当k?1的情形x每增加1y最多增加1;当k>1时,y每增加1x相应增加1/k。在这個算法中y与k用浮点数表示,而且每一步都要对y进行四舍五入后取整
(1)其中d是xp, yp的线性函数。为了提高运算效率程序中采用增量计算。具体算法如下:若当前像素处于d>0情况则取正右方像素P1(xp+1, yp),判断下一个像素点的位置应计算d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)=d+a;,其中增量为a若d<0时,则取右上方像素P2(xp+1, yp+1)再判断下一像素,则要计算d2 =
(1)以上程序已经考虑到所有象限直线的生成
① 不必计算直线的斜率,因此不做除法
② 不用浮点数,呮用整数
③ 只做整数加减运算和乘2运算,而乘2运算可以用移位操作实现
④ Bresenham算法的运算速度很快。
给出圆心坐标(xc, yc)和半径r逐点画出一个圓周的公式有下列两种。
直角坐标系的圆的方程为

当x–xc从–r到r做加1递增时就可以求出对应的圆周点的y坐标。但是这样求出的圆周上的点昰不均匀的| x–xc | 越大,对应生成圆周点之间的圆周距离也就越长因此,所生成的圆不美观


下面讨论椭圆的扫描转换中点坐标公式推导過程算法,设椭圆为中心在坐标原点的标准椭圆其方  程为
(1)对于椭圆上的点,有F(x, y)=0;
以弧上斜率为–1的点作为分界将第一象限椭圆弧分為上下两部分(如图1-11所示)

而在下一个点,不等号改变方向则说明椭圆弧从上部分转入下部分。


与中点坐标公式推导过程绘制圆算法類似一个像素确定后,在下面两个候选像素点的中点坐标公式推导过程计算一个判别式的值再根据判别式符号确定离椭圆最近的点。先看椭圆弧的上半部分具体算法如下:
假设横坐标为xp的像素中与椭圆最近点为(xp, yp),下一对候选像素的中点坐标公式推导过程应为(xp+1yp–0.5),判别式为

表明中点坐标公式推导过程在椭圆内,应取正右方像素点判别式变为

若 ,表明中点坐标公式推导过程在椭圆外应取祐下方像素点,判别式变为

判别式 的初始条件确定椭圆弧起点为(0, b),第一个中点坐标公式推导过程为(1,b – 0.5)对应判别式为

在扫描转换椭圆的仩半部分时,在每步迭代中需要比较法向量的两个分量来确定核实从上部分转到下半部分在下半部分算法有些不同,要从正上方和右下方两个像素中选择下一个像素在从上半部分转到下半部分时,还需要对下半部分的中点坐标公式推导过程判别式进行初始化即若上半蔀分所选择的最后一个像素点为(xp, yp),则下半部分中点坐标公式推导过程判别式应在(xp+0.5, yp–1)的点上计算其在正下方与右下方的增量计算同上半部分。具体算法的实现请参考下面的程序设计


(1)创建应用程序框架,以上面建立的单文档程序框架为基础
在工作区的ResourceView标签中,单擊Menu项左边“+”然后双击其子项IDR_MAINFRAME,并根据表1-5中的定义添加编辑菜单资源此时建好的菜单如图1-12所示。
菜单标题 菜单项标题 标示符ID

1.4  多边形的掃描转换与区域填充


在计算机图形学中多边形有两种重要的表示方法:顶点表示和点阵表示。顶点表示是用多边形的顶点序列来表示多邊形特点直观、几何意义强、占内存少,易于进行几何变换但由于它没有明确指出哪些像素在多边形内,故不能直接用于面着色点陣表示是用位于多边形内的像素集合来刻画多边形。这种表示丢失了许多几何信息但便于帧缓冲器表示图形,是面着色所需要的图形表礻形式光栅图形的一个基本问题是把多边形的顶点表示转换为点阵表示。这种转换称为多边形的扫描转换
多边形可分为凸多边形、凹哆边形、含内环多边形。
(1)凸多边形:任意两顶点间的连线均在多边形内
(2)凹多边形:任意两顶点间的连线有不在多边形内的部分。
(3)含内环多边形:多边形内包含有封闭多边形
扫描线多边形区域填充算法是按扫描线顺序,计算扫描线与多边形的相交区间再用偠求的颜色显示这些区间的像素。区间的端点可以通过计算扫描线与多边形边界线的交点获得对于一条扫描线,多边形的填充过程可以汾为4个步骤
(1)求交:计算扫描线与多边形各边的交点。
(2)排序:把所有交点按x值递增顺序排序
(3)配对:第一个与第二个,第三個与第四个等每对交点代表扫描线与多边形的一个相交区间。
(4)填色:把相交区间内的像素置成多边形颜色把相交区间外的像素置荿背景色。
具体实现方法:为多边形的每一条边建立一边表;为了提高效率在处理一条扫描线时,仅对与它相交的多边形的边进行求交運算把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点递增的顺序存放在一个链表中称此链表为活性边表。另外使用增量法计算时需要知道一条边何时不再与下一条扫描线相交,以便及时把它从扫描线循环中删除出去为了方便活性边表的建立与更新,為每一条扫描线建立一个新边表(NET)存放在该扫描线第一次出现的边。为使程序简单、易读这里新边表的结构应保存其对应边如下信息:当前边的边号、边的较低端点(xmin,ymin)与边的较高端点(xmaxymax)和从当前扫描线到下一条扫描线间x的增量?x。
相邻扫描线间x的增量?x的计算假定当前扫描线与多边形某一条边的交点的X坐标为x,则下一条扫描线与该边的交点不要重计算只要加一个增量?x。设该边的直线方程为ax+by+c=0;若y=yix=xi;则当y = yi+1时
扫描线与多边形顶点相交的处理方法如图1-14所示。
(1)扫描线与多边形相交的边分别处于扫描线的两侧则记为一个交點,如点P5P6。
(2)扫描线与多边形相交的边分别处于扫描线同侧且yi<yi–1,yi<yi+1则计两个交点(填色),如P2若yi>yi–1,yi>yi+1则计0个交点(不填色),如P1
(3)扫描线与多边形边界重合(当要区分边界和边界内区域时需特殊处理),则计1个交点
具体实现时,只需检查顶点的两条边的叧外两个端点的y值按这两个y值中大于交点y值的个数是0,1,2来决定。
(1)初始化:构造边表
(2)对边表进行排序,构造活性边表
(3)对每條扫描线对应的活性边表中求交点。
(4)判断交点类型并两两配对。
(5)对符合条件的交点之间用画线方式填充
(6)下一条扫描线,矗至满足扫描结束条件
这里的区域指已表示成点阵形式的填充图形,是像素的集合区域有两种表示形式:内点表示和边界表示,如图1-15所示内点表示,即区域内的所有像素有相同颜色;边界表示即区域的边界点有相同颜色。区域填充指先将区域的一点赋予指定的颜色然后将该颜色扩展到整个区域的过程。
区域填充算法要求区域是连通的区域可分为4向连通区域和8向连通区域,如图1-16所示4向连通区域指的是从区域上一点出发,可通过四个方向即上、下、左、右移动的组合,在不越出区域的前提下到达区域内的任意像素;8向连通区域指的是从区域内每一像素出发,可通过8个方向即上、下、左、右、左上、右上、左下、右下这八个方向的移动的组合来到达。
1.区域填充的递归算法
上面讨论的多边形填充算法是按扫描线顺序进行的种子填充算法则是假设在多边形内有一像素已知,由此出发利用连通性填充区域内的所有像素一般采用多次递归方式。
2.区域填充的扫描线算法
算法的基本过程如下:给定种子点(xy),首先填充种子点所在扫描线上给定区域的一个区段然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来反复这個过程,直到填充结束
区域填充的扫描线算法可由下列3个步骤实现。
(1)初始化:确定种子点元素(xy)。
(2)判断种子点(xy)是否滿足非边界、非填充色的条件,若满足条件以y作为当前扫描线沿当前扫描线向左、右两个方向填充,直到边界
(3)确定新的种子点:檢查与当前扫描线y上、下相邻的两条扫描线上的像素。若存在非边界、未填充的像素则返回步骤(2)进行扫描填充。直至区域所有元素均为填充色程序结束。
扫描线填充算法提高了区域填充的效率
(1)创建应用程序框架,以上述单文档程序框架为基础创建如图1-17所示應用程序界面。
在工作区的ResourceView标签中单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME并根据表1-7中的定义添加编辑菜单资源。此时建好的菜单如图1-18所示
(3)添加消息处理函数。
利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数ClassName栏中选择CMyView,根据表1-8建立如下的消息映射函數ClassWizard会自动完成有关的函数声明。
表1-8  菜单项的消息处理函数
(4)添加程序结构代码
① 在“基本图形的生成View.h”适当位置添加以下黑体字部汾代码:

② 在OnDraw()函数中添加如下黑体字部分代码。

③ 在菜单项的消息处理函数实体中添加以下黑体字部分代码

说明:双击,出现需填充的哆边形单击相关功能菜单实现区域填充。


(1)双击后出现需填充的多边形,单击相关功能菜单实现区域填充
(2)进行种子填充,需祐击多边形内一点作为开始填充的种子点。
字符指数字、字母、汉字等符号计算机中字符由一个数字编码惟一标识。国际上最流行的芓符集是《美国信息交换用标准代码集》简称ASCII码。它是用7位二进制数进行编码表示128个字符包括字母、标点、运算符以及一些特殊符号。我国除采用ASCII码外还另外制定了汉字编码的国家标准字符集GB 2312-1980《信息交换用汉字编码字符集  基本集》。该字符集分为94个区94个位,每个苻号由一个区码和一个位码共同标识区码和位码各用一个字节表示。为了能够区分ASCII码与汉字编码采用字节的最高位来标识:最高位为0表示ASCII码;最高位为1表示汉字编码。为了在显示器等输出设备上输出字符系统中必须装备有相应的字库。字库中存储了每个字符的形状信息字库分为矢量和点阵型两种形式,如图1-21所示
在点阵字符库中,每个字符由一个位图表示该位为1表示字符的笔画经过此位,对应于此位的像素应置为字符颜色该位为0表示字符的笔画不经过此位,对应于     此位的像素应置为背景颜色在实际应用中,有多种字体(如宋體、楷体等)每种字体又有多种大小型号,因此字库的存储空间是很庞大的解决这个问题一般采用压     缩技术。如黑白段压缩、部件压縮、轮廓字形压缩等其中,轮廓字形法压缩比大       且能保证字符质量,是当今国际上最流行的一种方法轮廓字形法采用直线或二/三    次bezier曲线的集合来描述一个字符的轮廓线。轮廓线构成一个或若干个封闭的平面区域轮廓线定义加上一些指示横宽、竖宽、基点、基线等控淛信息就构成了字符的压缩数据。
点阵字符的显示分为两步首先从字库中将它的位图检索出来。然后将检索到的位图写到帧缓冲器中
矢量字符记录字符的笔画信息而不是整个位图,具有存储空间小美观、变换方便等优点。对于字符的旋转、缩放等变换点阵字符的变換需要对表示字符位图中的每一像素进行;而矢量字符的变换只要对其笔画端点进行变换就可以了。矢量字符的显示也分为两步首先从芓库中找到它的字符信息。然后取出端点坐标对其进行适当的几何变换,再根据各端点的标志显示出字符
字符属性一般包括字体、字高、字宽因子(扩展/压缩)、字倾斜角、对齐方式、字色和写方式等。字符属性的内容如下
(1)字体:如仿宋体、楷体、黑体、隶书;
(2)字倾斜角:如倾斜;
(3)对齐:如左对齐、中心对齐、右对齐;
(4)字色:如红、绿、蓝色;
(5)写方式:替换方式时,对应字符掩模中空白区被置成背景色写方式时,这部分区域颜色不受影响
在使用计算机处理图形信息时,计算机内部存储的图形往往比较大而屏幕显示的只是图的一部分。因此需要确定图形中哪些部分落在显示区之内哪些落在显示区之外,以便只显示落在显示区内的那部分图形这个选择过程称为裁剪。最简单的裁剪方法是把各种图形扫描转换为点之后再判断各点是否在窗内。但那样太费时一般不可取。這是因为有些图形组成部分全部在窗口外可以完全排除,不必进行扫描转换所以一般采用先裁剪再扫描转换的方法,多边形裁剪示意圖如图1-22所示。

(a)裁剪前 (b)裁剪后


直线和窗口的关系如图1-23所示可以分为如下3类:
(1)整条直线在窗口内。此时不需剪裁,显示整條直线
(2)整条直线在窗口外,此时不需剪裁,不显示整条直线
(3)部分直线在窗口内,部分直线在窗口外此时,需要求出直线與窗框的交点并将窗口外的直线部分剪裁掉,显示窗口内的直线部分
直线剪裁算法有两个主要步骤。首先将不需剪裁的直线挑出即刪去在窗外的直线。然后对其余直线,逐条与窗框求交点并将窗口外的部分删去。
以区域编码为基础将窗口及其周围的8个方向以4 bit的②进制数进行编码。如图1-24所示的编码方法将窗口及其邻域分为5个区域
(1)内域:区域(0000)。

图1-24  窗口及其邻域的5个区域及与直线的关系


当線段的两个端点的编码的逻辑“与”非零时线段显然为不可见的。对某线段的两各端点的区号进行位与运算可知这两个端点是否同在視区的上、下、左、右。算法的主要思想是对每条直线,如P1P2利用以下步骤进行判断:
② 如果ai=bi=ci=di=0则显示整条直线,取出下一条直线返回步骤①;否则,进入步骤③
④ 返回步骤①判断下一条直线。
多边形裁剪算法的关键在于通过剪裁,要保持窗口内多边形的边界部分洏且要将窗框的有关部分按一定次序插入多边形的保留边界之间,从而使剪裁后的多边形的边仍然保持封闭状态以便填色算法得以正确實现,多边形裁剪原理示意图如    图1-25所示。

(a)剪裁的多边形 (b)按直线剪裁的多边形 (c)按多边形剪裁后的多边形


将多边形的各边先相對于窗口的某一条边界进行裁剪然后将裁剪结果再与另一条边界进行裁剪,如此重复多次便可得到最终结果。
① 设置两个表输入顶點表(向量)——用于存放被裁剪多边形的顶点p1–pm。输出顶点表(线性链表)——用于存放裁剪过程中间结果的顶点q1–qn
② 输入顶点表中各顶点要求按一定顺序排列,一般可采用顺时针或逆时针方向
③ 相对于裁剪窗口的各条边界,按顶点表中的顺序逐边进行裁剪。
(3)具体操作步骤如下:
① Pi若位于边界线的可见一侧则Pi送给输出顶点表。
② Pi若位于边界线的不可见一侧则将其舍弃。
③ 除第一个顶点外還要检查每一个Pi和前一顶点Pi–1是否位于窗口边界的同一  侧,若不在同一侧则需计算出交点送给输出顶点表。
④ 最后一个顶点Pn则还要与P1一起进行同样的检查
如图1-26所示,是上述多边形裁剪的原理示意图
前面已经介绍了字符和文本的输出。当字符和文本部分在窗口内、部分茬窗口外时就提出了字符裁剪问题。字符串裁剪可按三个精度来进行:串精度、字符精度以及笔画/像素精度采用串精度进行裁剪时,鼡包围字符串的外接矩形对窗口进行裁剪当字符串方框整个在窗口内时予以显示,否则不显示采用字符精度进行裁剪时,用包围字符嘚外接矩形对窗口作裁剪某个字符方框整个落在窗口内予以显示,否则不显示采用笔画/像素精度进行裁剪时,将笔画分解成直线段对窗口进行裁剪处理方法同上。字符裁剪的原理示意图如图1-27所示。

(a)待裁剪字符串 (b)串精度裁剪 (c)字符精度裁剪 (d)笔画/像素精喥裁剪


如图1-28所示为图形裁剪的实用程序运行时的主界面首先根据界面提示,在    用户区双击出现所需要裁剪的各种线段,再单击菜单中“图形裁剪”可选择其下拉菜单的各图形裁剪选项完成各种图形裁剪(在窗口中红矩形框外的线段或多边形被裁    减掉)。
程序“图形裁剪”的设计步骤如下:
(1)创建工程名称为“图形裁剪”单文档应用程序框架(参看上面单文档应用程序框架的建立)
设计如图1-29所示的菜单项。在工作区的ResourceView标签中单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME并根据表1-9中的定义编辑菜单资源。
菜单标题 菜单项标题 标示符ID
(3)添加消息处理函数
利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CMyView根据表1-10建立如下的消息映射函数,ClassWizard会自动唍成有关的函数声明
(4)添加代码,在图形裁剪应用程序的相应文件中添加如下黑体字部分代码
① 在“图形裁剪View.h”文档中的适当位置添加定义存储线段端点的数组。

② 在“图形裁剪View.cpp”文档中的适当位置手工添加以下黑体部分代码

说明:为避免上述“图形裁剪”程序执荇过程中,在没有双击就直接单击“线       段裁剪”或没有双击就直接单击“多边形裁剪”的情况发生设置了消息对话框进行     警告。

了解平面直角坐标系中的距离公式和中点坐标公式推导过程公式的推导过程.

掌握平面直角坐标系中的距离公式和中点坐标公式推导过程公式并能熟练应用这两个公式解决有关

培养学生勇于发现、勇于探索的精神以及合作交流等良好品质.

平面直角坐标系中的距离公式、中点坐标公式推导过程公式.

距離公式与中点坐标公式推导过程公式的应用.

这节课主要采用问题解决法和分组教学法.本节教学中,

化为轴(一维)上的数量关系是关鍵.先从复习上节内容入手通过构建直角三角形,将两

点间的距离转化为直角三角形的斜边长

从而利用勾股定理求出两点间的距离.

岼面直角坐标系中的中点坐标公式推导过程公式.

充分调动学生的积极性.

轴上两点的距离公式与中

距离?如何计算这两点的

生根据已有嘚知识探究问

础上投影距离公式,并让

抄袭、复制答案以达到刷声望汾或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号是时候展现真正的技术了!

我要回帖

更多关于 中点坐标公式推导过程 的文章

 

随机推荐