精华内容
下载资源
问答
  • 19.90 积分实验三 二维图形变换、实验任务1. 通过二维几何变换的数学模型,编写缩放、旋转、对称变换;2. 实现图形变换的交互式操作:缩放、旋转、对称变换等;二、实验内容1. 放大缩小变换放大缩小变换公式为...

    a7f4a3f590493a1e451dd952a488fd7c.gif 计算机图形学实验:二维图形变换.docx

    (9页)

    0d31618c01b0ec34ea23be51b7256cd4.gif

    本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

    19.90 积分

    实验三 二维图形变换一、实验任务1. 通过二维几何变换的数学模型,编写缩放、旋转、对称变换;2. 实现图形变换的交互式操作:缩放、旋转、对称变换等;二、实验内容1. 放大缩小变换放大缩小变换公式为:x’=x..Sx, y’=y.Sy; 其中Sx, Sy分别为x,y方向的放缩比例系数。变换矩阵表达式为:Sx 0 00 Sy 00 0 1 [x’ y’ 1]=[x y 1]可通过下面不同的比例系数来显示程序运行结果。(1)Sx=Sy= 1.5;等比例放大(2)Sx=Sy= 0.5;等比例缩小2. 对称变换包括以x轴对称、y轴对称和原点O对称三种。由于屏幕坐标只有第一象限,我们可以将原点平移到(500,240)处。在第一象限画出一个三角形,然后分别求出三个对称图形。3. 旋转变换将图形上的点(x,y)旋转θ角度,得到新的坐标(x’,y’)为: x’=xcosθ-ysinθ, y’=xsinθ+ycosθ;cosθ sinθ 0-sinθ cosθ 00 0 1变换矩阵表示为: [x’ y’ 1]=[x y 1]4.三、设计思路1. 通过二维几何变换的数学模型,编写缩放、旋转、对称变换;2. 以(500,240)为原点建立图形变换的参考坐标系;3. 通过键盘按键控制图形的缩放、旋转、对称变换;4. 变换图形设定为以Pt[0](540,220)、Pt[1](670,130)、Pt[2](560,120)为顶点的三角形。步骤:1. 建立Trans工程文件;2. 利用Resource View设计菜单,如图所示;菜单菜单项ID值图形变换(&T)缩放(&Z)ID_TRANSFORM_SCALE图形变换(&T)旋转(&R)ID_TRANSFORM_ROTATE图形变换(&T)对称(&S)ID_TRANSFORM_SYMMETRY3. 在CTransView视图类中添加消息映射函数;对象消息函数ID_TRANSFORM_SCALECOMMANDOnFigureCirleID_TRANSFORM_ROTATECOMMANDOnFigureEllipseID_TRANSFORM_SYMMETRYCOMMANDOnTransformSymmetry4. 添加自定义的成员变量:CPoint Pt[3]; //三角形定点数组float dAngle; //每一次旋转的角度 在视图类CPP文件的构造函数中初始化成员变量Pt[0].x = 540; Pt[0].y = 220; Pt[1].x = 670; Pt[1].y = 130; Pt[2].x = 560; Pt[2].y = 120; dAngle = 0;5. 在视图类的OnDraw()函数中加入下列代码,实现视图绘图。void CTransView::OnDraw(CDC* pDC){ CTransDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here//绘出以以(540,220)、(670,130)、(560,120)为顶点的三角形。pDC->MoveTo(Pt[0]); pDC->LineTo(Pt[1]); pDC->LineTo(Pt[2]); pDC->LineTo(Pt[0]);//绘出以(500,240)为原点的坐标轴 pDC->MoveTo(100,240);pDC->LineTo(900,240); pDC->MoveTo(500,5);pDC->LineTo(500,400); pDC->TextOut(900,235,"x轴");pDC->TextOut(500,400,"y轴");//控制信息 pDC->TextOut(15,10,"对称变换:键盘方向键"); pDC->TextOut(15,28,"缩放变换:Z键缩小;X键放大"); pDC->TextOut(15,46,"旋转变换:键盘R键");}6. 添加预编译常量#define PI 3.7. 分别编写步骤3中向视图类中添加消息映射函数,程序如下:void CTransView::OnTransformRotate() { // TODO: Add your command handler code here float dRadiusAngle = 30.0 * PI /180.0; for(int i=0; i<3; i++) { Pt[i].x = Pt[i].x * cos(dRadiusAngle) - Pt[i].y * sin(dRadiusAngle); Pt[i].y = Pt[i].x * sin(dRadiusAngle) + Pt[i].y * cos(dRadiusAngle); } RedrawWindow();} //实现图形旋转void CTransView::OnTransformScale() { // TODO: Add your command handler code here float dScaleX = 2.0; float dScaleY = 0.5; for(int i=0; i<3; i++) { Pt[i].x *= dScaleX; Pt[i].y *= dScaleY; } RedrawWindow();} //实现图形缩放void CTransView::OnTransformSymmetry() { // TODO: Add your command handler code here for(int i=0; i<3; i++) { Pt[i].x += Pt[i].x; Pt[i].y += Pt[i].y; } RedrawWindow();} //实现图形对称8. 添加成员函数实现键盘交互式控制图形变换函数及代码如下:void CTransView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default int i=0; CPoint TmpPt = Pt[0]; switch (nChar){ case VK_UP: //上 for(i=0; i<3; i++) { Pt[i].y =240-(Pt[i].y-240); } break; case VK_DOWN: //下 for(i=0; i<3; i++) { Pt[i].y =240-(Pt[i].y-240); } break; case VK_LEFT: //左 for(i=0; i<3; i++) { Pt[i].x =500-(Pt[i].x-500); } break; case VK_RIGHT: //右 for(i=0; i<3; i++) { Pt[i].x =500-(Pt[i].x-500); } break; case 0X5A: //Z的ASCII码 Pt[1] = Pt[1] - Pt[0]; Pt[2] = Pt[2] - Pt[0]; Pt[0].x = Pt[0].y = 0; for(i=1; i<3; i++) { Pt[i].x *= 0.5; Pt[i].y *= 0.5; } Pt[0] = TmpPt; Pt[1] = Pt[1] + Pt[0]; Pt[2] = Pt[2] + Pt[0]; break; case 0X58: //X的ASCII码 Pt[1] = Pt[1] - Pt[0]; Pt[2] = Pt[2] - Pt[0]; Pt[0].x = Pt[0].y = 0; for(i=1; i<3; i++) { Pt[i].x *= 2.0; Pt[i].y *= 2.0; } Pt[0] = TmpPt; Pt[1] = Pt[1] + Pt[0]; Pt[2] = Pt[2] + Pt[0]; break; case 0X52 : //R的ASCII码 dAngle = -1.0; //每一次逆时针旋转一度 float dRadiusAngle = dAngle * PI /180.0; Pt[1] = Pt[1] - Pt[0]; Pt[2] = Pt[2] - Pt[0]; Pt[0].x = Pt[0].y = 0; for(int i=1; i<3; i++) //由于CPoint的x和y坐标值都为正值,所以如果计算出是负值来时,就直接赋0 { Pt[i].x = (float)Pt[i].x * cos(dRadiusAngle) - (float)Pt[i].y * sin(dRadiusAngle); Pt[i].y = (float)Pt[i].x * sin(dRadiusAngle) + (float)Pt[i].y * cos(dRadiusAngle); } Pt[0] = TmpPt; Pt[1] = Pt[1] + Pt[0]; Pt[2] = Pt[2] + Pt[0]; break; } RedrawWindow(); CView::OnKeyDown(nChar, nRepCnt, nFlags);}9. 编译和运行程序,查看程序运行结果四、实验效果及分析运行程序:按方向键“←”:按方向键“↓”按“Z”键按“X”键按“R”键进行旋转变换时,发现三角形的形状会有略微变化。8 关 键 词: 图形 变换 二维 实验 计算机

    4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

    展开全文
  • matlab二维图形的绘制

    2021-04-24 19:29:27
    matlab二维图形的绘制 MATLA‎B技术论坛‎ www.matla‎ 账号zap‎2004 密码zap‎2004 matla‎b二维图形‎的绘制 2007年‎12月17‎日 星期 10:37 常用的二维‎图形命令: plot:绘制二维图‎形 loglo‎g:用全对数坐...

    41528d3028836879cd698677c3999917.gifmatlab二维图形的绘制

    MATLA‎B技术论坛‎ www.matla‎ 账号zap‎2004 密码zap‎2004 matla‎b二维图形‎的绘制 2007年‎12月17‎日 星期一 10:37 常用的二维‎图形命令: plot:绘制二维图‎形 loglo‎g:用全对数坐‎标绘图 semil‎ogx:用半对数坐‎标(X)绘图 semil‎ogy:用半对数坐‎标(Y)绘图 fill: 绘制二维多‎边填充图形‎ polar‎:绘极坐标图‎ bar:画条形图 stem:画离散序列‎数据图 stair‎s:画阶梯图 error‎bar:画误差条形‎图 hist:画直方图 fplot‎:画函数图 title‎:为图形加标‎题 xlabe‎l:在X轴下做‎文本标记 ylabe‎l:在Y轴下做‎文本标记 zlabe‎l:在Z轴下做‎文本标记 text:文本注释 grid:对二维三维‎图形加格栅‎ 绘制单根二‎维曲线 plot函‎数,基本调用格‎式为: plot(x,y) 其中x和y‎为长度相同‎的向量,分别用于存‎储x坐标和‎y坐标数据‎。 例如:在0≤x≤2pi区间‎内,绘制曲线 y=2e-0.5xcos‎(4πx) 程序如下: x=0:pi/100:2*pi; y=2*exp(-0.5*x).*cos(4*pi*x); plot(x,y) plot函‎数最简单的‎调用格式是‎只包含一个‎输入参数: plot(x) 在这种情况‎下,当x是实向‎量时,以该向量元‎素的下标为‎横坐标,元素值为纵‎坐标画出一‎条连续曲线‎,这实际上是‎绘制折线图‎。 p=[22,60,88,95,56,23,9,10,14,81,56,23]; plot(p) 绘制多根二‎维曲线 1.plot函‎数的输入参‎数是矩阵形‎式 (1) 当x是向量‎,y是有一维‎与x同维的‎矩阵时,则绘制出多‎根不同颜色‎的曲线。曲线条数等‎于y矩阵的‎另一维数,x被作为这‎些曲线共同‎的横坐标。 (2) 当x,y是同维矩‎阵时,则以x,y对应列元‎素为横、纵坐标分别‎绘制曲线,曲线条数等‎于矩阵的列‎数。 (3) 对只包含一‎个输入参数‎的plot‎函数,当输入参数‎是实矩阵时‎,则按列绘制‎每列元素值‎相对其下标‎的曲线,曲线条数等‎于输入参数‎矩阵的列数‎。 当输入参数‎是复数矩阵‎时,则按列分别‎以元素实部‎和虚部为横‎、纵坐标绘制‎多条曲线。 2.含多个输入‎参数的pl‎ot函数 调用格式为‎: plot(x1,y1,x2,y2,…,xn,yn) (1) 当输入参数‎都为向量时‎,x1和y1‎,x2和y2‎,…,xn和yn‎分别组成一‎组向量对,每一组向量‎对的长度可‎以不同。每一向量对‎可以绘制出‎一条曲线,这样可以在‎同一坐标内‎绘制出多条‎曲线。 (2) 当输入参数‎有矩阵形式‎时,配对的x,y按对应列‎元素为横、纵坐标分别‎绘制曲线,曲线条数等‎于矩阵的列‎数。 例如:分析下列程‎序绘制的曲‎线。 x1=linsp‎ace(0,2*pi,100); x2=linsp‎ace(0,3*pi,100); x3=linsp‎ace(0,4*pi,100); y1=sin(x1); y2=1+sin(x2); y3=2+sin(x3); x=[x1;x2;x3] ; y=[y1;y2;y3] ; plot(x,y,x1,y1-1) 3.具有两个纵‎坐标标度的‎图形 在MATL‎AB中,如果需要绘‎制出具有不‎同纵坐标标‎度的两个图‎形,可以使用p‎lotyy‎绘图函数。调用格式为‎: ploty‎y(x1,y1,x2,y2) 其中x1,y1对应一‎条曲线,x2,y2对应另‎一条曲线。横坐标的标‎度相同,纵坐标有两‎个,左纵坐标用‎于x1,y1数据对‎,右纵坐标用‎于x2,y2数据对‎。 例如:用不同标度‎在同一坐标‎内绘制曲线‎y1=0.2e-0.5xcos‎(4πx) 和y2=2e-0.5xcos‎(πx)。 程序如下: x=0:pi/100:2*pi; y1=0.2*exp(-0.5*x).*cos(4*pi*x); y2=2*exp(-0.5*x).*cos(pi*x); ploty‎y(x,y1,x,y2); 4.图形保持 hold on/off命令‎控制是保持‎原有图形还‎是刷新原有‎图形,不带参数的‎hold命‎令在两种状‎态之间进行‎切换。 例如:采用图形保‎持,在同一坐标‎内绘制曲线‎ y1=0.2e-0.5xcos‎(4πx) 和y2=2e-0.5xcos‎(πx)。 程序如下: x=0:pi/100:2*pi; y1=0.2*exp(-0.5*x).*cos(4*pi*x); plot(x,y1) hold on y2=2*exp(-0.5*x).*cos(pi*x); plot(x,y2); hold off 设置曲线样‎式MATLA‎B提供了一‎些绘图选项‎,用于确定所‎绘曲线的线‎型、颜色和数据‎点标记符号‎,它们可以组‎合使用。例如,“b-.”表示蓝色点‎划线,“y:d”表示黄色虚‎线并用菱形‎符标记数据‎点。当选项省略‎时,MATLA‎B规定,线型一律用‎实线,颜色将根据‎曲线的先后‎顺序依次。 要设置曲线‎样式可以在‎plot函‎数中加绘图‎选项,其调用格式‎为: plot(x1,y1,选项1,x2,y2,选项2,…,xn,yn,选项n) 例如:在同一坐标‎内,分别用不同‎线型和颜色‎绘制曲线y‎1=0.2e-0.5xcos‎(4πx) 和y2=2e-0.5xcos‎(πx),标记两曲线‎交叉点。 程序如下: x=linsp‎ace(0,2*pi,1000); y1=0.2*exp(-0.5*x).*cos(4*pi*x); y2=2*exp(-0.5*x).*cos(pi*x); k=find(abs(y1-y2)<1e-2); %查找y1与‎y2相等点‎(近似相等)的下标 x1=x(k); %取y1与y‎2相等点的‎x坐标 y3=0.2*exp(-0.5*x1).*cos(4*pi*x1); %求y1与y‎2值相等点‎的y坐标 plot(x,y1,x,y2, k: ,x1,y3, bp ); 图形标注与‎坐标控制1.图形标注 有关图形标‎注函数的调‎用格式为: title‎(图形名称) xlabe‎l(x轴说明) ylabe‎l(y轴说明) text(x,y,图形说明) legen‎d(图例1

    展开全文
  • matlab给绘制二维图形提供了很多的函数,把一些绘制二维图形的基本函数做成一张表,如下图所示: 我就按照表的顺序一一记录一些个函数的简略用法。首先是1.plot函数plot函数有很多重载方法,这里只做简单的介绍1.1 ...

    matlab给绘制二维图形提供了很多的函数,把一些绘制二维图形的基本函数做成一张表,如下图所示:

    0818b9ca8b590ca3270a3433284dd417.png

    我就按照表的顺序一一记录一些个函数的简略用法。

    首先是

    1.plot函数

    plot函数有很多重载方法,这里只做简单的介绍

    1.1 plot(Y)

    1.1  若Y是向量,绘制向量Y对其索引值的曲线。

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    1.2 若Y是实数矩阵,绘制矩阵的每列对应于行数的曲线集合。

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    1.3  若Y是复数矩阵,等价于plot(real(Y),imag(Y));

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    1.2 plot(X,Y)

    1.2.1   若X,Y,均为向量,绘制向量Y对应向量X的曲线此时X的长度跟Y的长度必须相等。

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    1.2.2  若X为向量Y为矩阵,则X的长度与矩阵Y的行数或列数必须相等:

    1.2.2.1       X的长度与Y的列数相等,或X的长度与矩阵Y的行数和列数均相等(Y为方阵),绘制矩阵Y的每列对应X的曲线集合

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    1.2.2.2       X的长度与Y的行数相等,绘制矩阵Y的每行对应X的曲线集合

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    1.2.2  若X为矩阵Y为向量,则Y的长度与矩阵X的行数或列数必须相等,绘制方法与1.2.1类似,不在过多介绍

    图略

    1.2.3  若X,Y均为矩阵,则X,Y的大小必须相等,绘制矩阵Y的每列对应X的每列的曲线。

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    P.S 如果矩阵是复数矩阵,会自动忽略掉复数的虚部。。。。。

    1.3 plot(X,Y,LineSpec)

    绘制Y对应于X的曲线集合,并指定曲线的LineSpec,比如线型,标记符号,和颜色或其任意组合,API上关于LineSpec的讲解很详细。

    1.4 plot(X,Y,‘属性’,属性值)

    跟1.3 相比,只是属性值得不同。API上有很多

    P.S  1. 有一种调用的方法  h =  plot(x....)  返回和曲线的句柄,其实感觉就像是指针

    2.semilogx  semilogy  和 loglog 等函数的使用方法和plot基本类似,只是在曲线的外观上有所不同

    2.plotyy函数

    这个函数又叫双Y轴函数(上面的例子都是单Y轴函数,只有左侧一个Y轴)。plotyy是为了满足 :对函数值变化范围较大的两组数据同事绘图(这个时候用hold on,会很难从图形中辨识函数值变化范围较小的那组数据变化趋势的细节信息的,因为坐标系太大,所以才有这样的双坐标轴绘图),

    比如这么样的一个表格:

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    3.polar函数

    前面的函数都是在直角坐标系的绘图的,但是有时候需要在极坐标或者柱坐标中绘图,于是就有了poltar(极坐标绘图函数)

    >> polar(theta,rho,LineSpec)     其中theta是极脚,rho是极径,其他的方法跟其他绘图函数基本相同。

    网上找了个例子:

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    当然,还有很多坐标变换函数比如cart2pol 之类的,自行百度

    4.fplot函数

    如果不太了解某个函数随自变量的变化趋势,随便的就取定自变量的范围,很可能就用为自变量取值范围不好而是的绘制出的图片失真,为解决此问题可以使用fplot。这个函数,据说可以通过其内部的自适应算法动态的决定自变量的间隔。比如,函数值得变化较为剧烈,那么自变量的取值间隔就小。从而保证绘制出的图形的质量和效率。

    绘制出的图形的质量和效率。

    基本的调用函数形式为:

    fplot(fun,limits)其中,fun为要绘制的函数,fun可以为可执行字符串,M文件,inline或者匿名函数。fun为要绘制的函数,limits为指定的范围,可以使二维向量平[xmin,xmax]或四维向量[xmin,xmax,ymin,ymax]

    比如:

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    5.ezplot函数

    ezplot函数可以直接绘制一元函数 如     y=f(x)  参数方程

    0818b9ca8b590ca3270a3433284dd417.png  构成的函数y=f(x),以及隐函数f(x,y)=0的图形。

    它的调用跟fplot类似,基本的调用方法是:

    ezplot(fun,limits)   参见4.

    至此,二维图形的绘制只剩下子图和交互式绘图了。

    子图

    为了突出的对比几个相似图形,一般可以使用子图(subplot),这样就可以在一个figure中做若干个图。

    使用方法:subplot(m,n,p)

    其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一列的,一共m行,如果m=2就是表示2行图。p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。

    网上找了个例子:

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    交互式绘图

    交互式绘图的常用方法是:ginput,gtext

    在绘图前调用,然后在调用绘图函数,即可。比如用ginput可以方便的通过鼠标来读取二维平面图形的任意一个点的坐标值。当调用时,如ginput,会是当前的图形从后台调到前台,然后咱们可以移动鼠标点击想要选取的点,完成后(到可N值,或按下space),会在命令窗口看见点的坐标

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    展开全文
  • 本文实例讲述了C++实现二维图形的傅里叶变换的方法。有一定的借鉴价值。分享给大家供大家参考。具体代码如下:// Fourier.cpp : Defines the entry point for the console application.//#include "stdafx.h"#...

    本文实例讲述了C++实现二维图形的傅里叶变换的方法。有一定的借鉴价值。分享给大家供大家参考。

    具体代码如下:

    // Fourier.cpp : Defines the entry point for the console application.

    //

    #include "stdafx.h"

    #include "stdio.h"

    #include "math.h"

    #include

    #include

    #include "cxcore.h"

    int main(int argc, char* argv[])

    {

    IplImage *img;

    IplImage *simg;

    CvMat *mat_R;

    CvMat *mat_I;

    CvMat *mat_SRC;

    CvMat *mat_Row;

    CvMat *mat_Col;

    CvMat *dst;

    CvMat *dst_R;

    CvMat *dst_I;

    CvMat *dst_Row;

    CvMat *dst_Col;

    int i,j,k;

    double temp;

    int height,width,step,channels;

    //载入一幅图片

    img=cvLoadImage("c:\\1.bmp",0);

    //mat_R初始化

    mat_R=cvCreateMat(img->height,img->width,CV_64FC1);

    //mat_I初始化

    mat_I=cvCreateMat(img->height,img->width,CV_64FC1);

    //mat_SRC初始化

    mat_SRC=cvCreateMat(img->height,img->width,CV_64FC2);

    //将图片数据存入mat_R(实部)

    cvConvert(img,mat_R);

    //将虚部初始化为零

    cvZero(mat_I);

    //合并实部、虚部

    cvMerge(mat_R,mat_I,NULL,NULL,mat_SRC);

    //创建双通道double类型数组

    dst=cvCreateMat(img->height,img->width,CV_64FC2);

    dst_R=cvCreateMat(img->height,img->width,CV_64FC1);

    dst_I=cvCreateMat(img->height,img->width,CV_64FC1);

    //为循环变量赋值

    height=img->height;

    width=img->width;

    channels=2;

    step=channels*width;

    //局部变量,值为正一或负一

    int check;

    //将输入数据乘以(-1)^(i+j),用于中心化

    for(j=0;j

    {

    for(i=0;i

    {

    check=(i+j)%2>0?1:-1;

    for(k=0;k

    {

    mat_SRC->data.db[j*step+i*channels+k]=check*mat_SRC->data.db[j*step+i*channels+k];

    }

    }

    }

    //创建一个mat用于临时存储一行数据

    CvMat mat_Header=cvMat(4,4,CV_64FC2);

    mat_Row=cvCreateMat(1,width,CV_64FC2);

    mat_Col=cvCreateMat(1,height,CV_64FC2);

    //创建一个dst用于临时存储一行数据

    dst_Row=cvCreateMat(1,width,CV_64FC2);

    dst_Col=cvCreateMat(height,1,CV_64FC2);

    //为循环变量赋值

    height=img->height;

    width=img->width;

    channels=2;

    step=channels*width;

    //行的傅里叶变换

    for(j=0;j

    {

    //取得第j行数据

    mat_Row=cvGetRow(mat_SRC,&mat_Header,j);

    //正向傅里叶变换

    cvDFT(mat_Row,dst_Row,CV_DXT_FORWARD);

    //执行循环,赋值到dst

    for(i=0;i

    {

    for(k=0;k

    {

    dst->data.db[j*step+i*channels+k]=dst_Row->data.db[i*channels+k];

    }

    }

    }

    //列的傅里叶变换

    for(i=0;i

    {

    //取得第i列

    mat_Col=cvGetCol(dst,&mat_Header,i);

    //正向傅里叶变换

    cvDFT(mat_Col,dst_Col,CV_DXT_FORWARD);

    //执行循环,赋值到dst

    for(j=0;j

    {

    for(k=0;k

    {

    dst->data.db[j*step+i*channels+k]=dst_Col->data.db[j*channels+k];

    }

    }

    }

    //分成两个矩阵

    cvSplit(dst,dst_R,dst_I,NULL,NULL);

    //创建临时指针指向dst_R,dst_I

    double *pR,*pI;

    pR=(double *)dst_R->data.ptr;

    pI=(double *)dst_I->data.ptr;

    //创建一张用于显示的图像

    simg=cvCreateImage(cvGetSize(img),8,1);

    //为循环变量赋值

    height=simg->height;

    width=simg->width;

    channels=1;

    step=channels*width;

    for(j=0;j

    {

    for(i=0;i

    {

    for(k=0;k

    {

    temp=pR[j*step+i*channels+k]*pR[j*step+i*channels+k]+pI[j*step+i*channels+k]*pI[j*step+i*channels+k];

    temp=temp/(height*width);

    simg->imageData[j*step+i*channels+k]=sqrt(temp);

    }

    }

    }

    cvNamedWindow("Mar",CV_WINDOW_AUTOSIZE);

    cvShowImage("Mar",simg);

    cvWaitKey(0);

    cvReleaseMat(&mat_R);

    cvReleaseMat(&mat_I);

    cvReleaseMat(&mat_SRC);

    //cvReleaseMat(&mat_Row);//这里无法正常释放,有待解决

    //cvReleaseMat(&mat_Col);

    cvReleaseMat(&dst);

    cvReleaseMat(&dst_R);

    cvReleaseMat(&dst_I);

    cvReleaseImage(&img);

    cvReleaseImage(&simg);

    return 0;

    }

    感兴趣的朋友可以调试运行一下本文实例,程序美中不足的是会有内存泄漏,主要是mat_Row,mat_Col,dst_Row,dst_Col,有能力的读者可以对此进行修改与完善。相信会有新的收获。

    展开全文
  • 实验二二维及三维图形基本变换的实现、实验学时 4学时二、实验类型 设计型实验三、实验目的和要求1、掌握二维图形变换的原理,对条直线实现二维基本变换(平移、错切、比例、旋转)。2、掌握三维图形变换的原理,...
  • 向量的一些基本概念向量的相加和数乘向量的...= 0 (i = 1,2,...,m)向量的度量和单位向量向量的点积叉积计算机图形学中坐标系的分类1、世界坐标系:世界坐标系是个公共坐标系,是现实中物体或场景的统一参照系。...
  • 任意给定个三角形, 对它进行平移,放大,两种变换.(1)将三角形的坐标存放到数组中(2)先画出原始的三角形,再进行变换,画出变换后的形状(3)建议:a)左键双击屏幕,画出三角形void CTranslationView::DrawPolyline...
  • 1、计算机科学通信工程学院实验报告课程计算机图形学实验题目二维图形变换学生姓名学号专业班级指导教师日期成绩评定表评价内容具体内容权重得分论证分析方案论证综合分析的正确、合理性20%算法设计算法描述的...
  • 用(n+1)维向量表示n维向量,ex:二维平面上的点P(x,y)表示为(hx,hy,h);h≠0.n维空间类推; 注意:n维空间用非齐次坐标表示的向量坐标值唯一,齐次坐标表示不唯一(因为有比例系数); 规范化齐次坐标:即h = 1....
  • 新建个文档命名为1124,文档类型为单文档。 创建CP2类 右键1124 classes,点击new class新建个类CP2: 在CP2类中声明三个域:(double x;double y;UINT rc;) 找到cpp文件,在里面引用CP2这个类:(#include ...
  • 直线图形   绘制直线段一般需要进行栅格化(又叫光栅化)处理:将几何数据经过系列变换后转换为像素呈现在显示设备上。   数值微分算法(DDA)   数值微分算法本质为用数值方法解微分方程,即通过同时对x和y...
  • matlab二维图形的绘制1(数据可视化技术)matlab二维图形的绘制1(数据可视化技术)基本的二维绘图:plot函数是最基本的、最常用的绘图函数。用于绘制线性二维图。有多条曲线时,循环使用由坐标轴颜色顺序属性定义的颜色...
  • 【实验名称】 二维图形几何变换及裁剪 【实验目的】 1. 通过实验,进一步理解和掌握二维几何图形的基本变换及复合变换的原理; 2. 理解和掌握cohen-sutherland裁剪算法的基本思想。 【实验原理】 1.平移变换...
  • 第三节 二维裁剪、线段裁剪二、多边形裁剪第三节 二维裁剪在二维图形的绘制或显示处理中,有时需要给出或显示某部分原始图形。这可在适当位置按一定边界范围定义个矩形区域(即窗口),使窗口内图形为所需部分,...
  • MATLAB二维图形制作

    2021-04-18 06:40:46
    1条形图、面积图分别使用plot函数bar函数和area函数例:x=[1 2 3 4 5 6 7 8];... area(y)hold on %%在原图上叠加新的图形>> bar(x,y)colormap cool % 暂未实现 colormap颜色查找表 cool 定义好的颜色...
  • 参考课堂教学中关于模型变化的讲解,编写对个三角形分别实现...第幅图中表现得是经过几种分开的变换的效果,分别为平移、旋转、缩放和原图,其中也是使用了混合颜色的方式进行填充的。为了使几个转换之间相互不...
  • 通常有下列两种方法来绘制二维图形:1.绘制图像或动画到图像视图(ImageView)上图像或动画是由系统的显示绘图处理器来操作,简单来说只是将图像放进图像视图中。当您所描绘的是静态图或是已经规划好的连续动作的动画...
  • 实验四01 二维图形的几何变换.doc计算机图形学实验指导书陈华光、陈多、刘长松编专业班级 计算机0902 _ 姓 名 田鹏 _ 学 号 200903010225 _湖南工程学院二二年六月计算机图形学实验报告四实验名称 绘制简单的三维...
  • 对于平面图形输出集合图形与数字组合的,用二维数组。先在Excel表格中分析一下,找到简单的规律。二维数组的行数为行高,列数为最后个数大小。对于减小再增大再减小再增大的,可以用个boolean标志其是增加还是...
  • Matlab绘图强大的绘图功能是Matlab的特点之,Matlab提供了系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对...
  • 本发明涉及数据特征增强技术领域,具体为一种将一维数据二维化的特征增强方法。背景技术:在利用数字射线成像系统进行特征检测过程中,由于系统和工件本身特点的原因,在获取的射线图像中,某些需要识别的特征信息...
  • 篇已经对图形的属性有过介绍,在此基础上来进行二维以及后续三维图形的操作(注:没接触过其他维度的操作,就不折腾相关的内容了),将会更容易理解这些属性的用法,当然,全部的属性使用都来遍,感觉就不太...
  • 二维图形学的变换使用过前端的css3,canva,svg的小伙伴应该对平移,旋转,缩放,剪切这些效果变换应该很熟悉了,但应该大部分小伙伴应该不清楚其中的原理,在二维图形方面如果能熟练使用图形学的基础算法,结合canva...
  • 计算机图形学 二维变换及二维第三章 二维变换及二维观察 本章主要内容 3.1二维图形的基本变换 3.2窗口视图变换 3.3复合变换 3.4二维图形裁剪 3.5本章小结 3.1 二维图形的基本变换 3.1.1 数学基础回顾 矢量 条有向...
  • 图形二维变换

    2021-10-18 11:40:49
    规范化齐次坐标的作用:可将图形变换表示为图形点集规范化次坐标矩阵变换矩阵相乘的形式。 平移变换 比例变换 旋转变换 对称变换 错位变换 相对任一参考点的二维几何变换 ...
  • 一般来说,大家使用CAD绘制的图形都是二维的,这些二维图形其实不难。接下来就是学习啦小编精心整理的一些关于CAD二维图形绘制的教程的相关资料,供你参考。CAD二维图形绘制的教程1、绘图菜单绘图菜单是绘制图形最...
  • 19.90 积分第五章 目录第五章 三维图形生成和变换技术 5.1 三维图形的概念 5.2 自由曲面的生成 5.3 三维图形的变换 5.4 三维图形剪裁和消隐 1第五章 三维图形生成和变换技术 5.1 三维图形的概念 在第章我们已讨论...
  • 、几何变换的概念 几何变换又称建模变换,指只改变组成形体的几何元素的几何信息(大小、形状、...1.二维平移变换 将点(x,y)平移到点(x’,y’) 2.二维旋转变换 需要指定旋转的基准点(绕那个点旋转)和旋转的角度
  • 计算机图形学实验报告-二维裁剪计算机科学技术学院2013-2014学年第学期《计算机图形学》实验报告班级:学号:姓名:教师:成绩:实验项目(3、二维裁剪)实验目的要求掌握线段裁剪算法原理,并实现其算法。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,063
精华内容 53,625
关键字:

一维图形与二维图形