ZKX's LAB

求代码注释:计算机图形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢 计算机图形学画线函数

2020-07-21知识11

求计算机图形学中画线和圆程序的源代码? vc画线和画圆都在win32回调函数中的WM_PAINT中执行:case WM_PAINT:/画线MoveToEx(hdc,p1.x,p1.y,NULL);起始点p1的坐标,hdc当前窗口句柄LineTo(hdc,p2.x,p2.y);从p1点往p2点画线/画圆Ellipse(hdc,p3.x,p3.y,p4.x,p4.y);p3,p4为圆的外切矩形的左上和右下坐标用C++如何实现bresenham画线算法?计算机图形学上面有个drawpixel的函数。不知道怎么用。 在MFC中可以这样实现:Bresenham算法画直线void CMyView:OnDrawLineByBresenham(){TODO:Add your command handler code hereCDC*pDC=GetDC();CPoint PtBegin(80,130);起始点CPoint PtEnd(320,370);终止点int s1,s2,interchange;double X=PtBegin.x;double Y=PtBegin.y;double deltax,deltay,f,Temp;deltax=abs(PtEnd.x-PtBegin.x);deltay=abs(PtEnd.y-PtBegin.y);if(PtBegin.x-PtBegin.x>;=0)s1=1;else s1=-1;if(PtEnd.y-PtBegin.y>;=0)s2=1;else s2=-1;f=2*deltay-deltax;if(deltay>;deltax){Temp=deltax;deltax=deltay;deltay=Temp;interchange=1;}else interchange=0;for(int i=1;i(deltax+deltay);i+){if(f>;=0){if(interchange=1)X+s1;else Y+s2;pDC->;SetPixel(int(X),int(Y),RGB(0,50,250));f=f-2*deltax;}else{if(interchange=1)Y+s2;else X+s1;pDC->;SetPixel(int(X),int(Y),RGB(200,0,0));f=f+2*deltay;}}}编译环境:VC6.0计算机图形学算法处理线段,急 修改了一下,主要是移动了一下位置。你的代码好老啊,比C99老多了,比C89还老。我简单的改了下,不知道是不是你的要求。也没TC,无法运行验证。includeincludedefine LEFT 1define RIGHT 2define BOTTOM 4define TOP 8define XL 100define XR 400define YB 100define YT 400去掉的代码float XL,YB,XR,YT;添加的代码/从main函数中移动过来void encode(float x,float y,int*code){int c=0;if(x)c=c|LEFT;else if(x>;XR)c=c|RIGHT;if(y)c=c|BOTTOM;else if(y>;YT)c=c|TOP;code=c;return;}(x1,y1)与(x2,y2)是线段端点坐标,其它四个参数分别定义窗口的左,下,右,上边界*/void C_S_LineCLip(float x1,float y1,float x2,float y2){int code1,code2,code;float x,y;encode(x1,y1,&code1);encode(x2,y2,&code2);while((code1。0)|(code2。0)){if((code1&code2)。0)return;code=code1;if(code1=0)code=code2;if((LEFT&code)。0)/*线段与左边界相交*/{x=XL;y=y1+(y2-y1)*(XL-x1)/(x2-x1);}else if((RIGHT&code)。0)/*线段与右边界相交*/{x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);}else if((BOTTOM&code)。0)/*线段与下边界相交*/{y=YB;x=x1+(x2-x1)*(YB-y1)。计算机图形学题目:完成一个点在一个正弦曲线上运动的动画程序 不知道你用什么语言。我的思路是这样的:作坐标系,在坐标系上添加圆的控件(缩小些就成了点.要不实际的点是一个像素的,看不清啊)。用程序的时钟功能(VB里面是timer),动态设置圆的坐标(x,sina(x))。注意:1.软件工作区域的左上角是它的坐标圆点,你自己作的坐标系要通过坐标变换获得真实的坐标(高中学过的);2.设置x的范围。当超过最大值,重新开始。3.时钟间隔设置,每次x递进的量,两者之间协调好,这样点移动的时候会自然写,人的视觉延迟大概0.1s,注意这个,产生连续效果。MATLAB如何画等高线图,等高线图在实际应用中经常被用到,MATLAB提供了三维等高线绘图指令和平面的线的绘图指令,可以根据实际画出想要的等高线图。利用TC画正弦曲线的算法和其主要思想。计算机图形学问题 梯度下降法吧,据说·求计算机图形学的中点画抛物线详细算法,已经每一步实现的功能,最好能说一下思想。谢谢! 抛物线是指平面内到一个定点F(焦点)和一条定直线l(准线)距离相等的点的轨迹。它有许多表示方法,例如参数表示,标准方程表示等等。它在几何光学和力学中有重要的用处。抛物线也是圆锥曲线的一种,即圆锥面与平行于某条母线的平面相截而得的曲线。二次函数的图像就是一条抛物线,它是一个轴对称图形。抛物线与对称轴的交点叫做抛物线的顶点。抛物线即把物体抛掷出去,落在远处地面,这物体在空中经过的曲线。平面内,到定点与定直线的距离相等的点的轨迹叫做抛物线。其中定点叫抛物线的焦点,定直线叫抛物线的准线。当抛物线的顶点为原点时,抛物线有以下特征:①原点在抛物线上;②对称轴为坐标轴;③准线与对称轴垂直,垂足与焦点分别对称于原点,它们与原点的距离都等于一次项系数的绝对值的1/4。对称轴为x轴时,方程右端为±2px,方程的左端为y^2;对称轴为y轴时,方程的右端为±2py,方程的左端为x^2;开口方向与x轴(或y轴)的正半轴相同时,焦点在x轴(y轴)的正半轴上,方程的右端取正号;开口方向与x(或y轴)的负半轴相同时,焦点在x轴(或y轴)的负半轴上,方程的右端取负号。抛物线的弦是连接抛物线上任意两点的线段。抛物线的焦弦是经过抛物线焦点。计算机图形学中,面的最小基本单位为什么一般是三角形 一楼回答不是很全面,我来做些补充吧。确实,三个不共线的点可以确定一个平面。而一般来说,平面的方程比曲面容易处理。然而,在计算机图形学中,有的时候也会用矩形作为最小基本单位。请注意,我们不能随便用任意四边形。这是因为四边形甚至更多边的多边形容易出现凹多边形。对于凹多边形,一般的算法难以快速判断一个像素点是否投影在多边形内部。而计算机图形学本质是把多边形投影到成像平面(成像平面的具体解释看最后)并对成像平面绘画。当我们不能快速判断像素点是否在多边形内,绘图效率会很低,甚至出错。对于凸多边形,我们只要知道一个像素点是否在多边形的每一边的某一侧就可以知道像素点是否对应在多边形内。而三角形是无论如何都会是凸多边形。而对于凹多边形,你用这种技巧会出现严重错误。这才是图形学喜欢用三角形原因的本质。我顺带说下三角形的具体操作。一般来说,我们会用三个顶点的权重值表示一个三角形所在平面。任意一个平面上的点只有3个权重值,而且三个权重值的总和是1。当三个数值为正,说明点在三角形内。当然,你可以把三权重值简化为两个权重值,因为有个线性条件。一般对于三角形ABC三点的权重,设a,b,c对应三点权重。对于A点的a,b,。C++画圆(计算机图形学) #includeinclude<;graphics.h>;/*预定义库函数*/void circlePoint(int x,int y)/*八分法画圆程序*/{circle(320 x*20,240 y*20,3);circle(320 y*20,240 x*20,3);circle(320-y*20,240 x*20,3);circle(320-x*20,240 y*20,3);circle(320-x*20,240 y*20,3);circle(320-x*20,240-y*20,3);circle(320-y*20,240-x*20,3);circle(320 y*20,240-x*20,3);circle(320 x*20,240-y*20,3);}void MidBresenhamcircle(int r)/*中点Bresenham算法画圆的程序*/{int x,y,d;x=0;y=r;d=1-r;计算初始值*/while(x){ circlePoint(x,y);绘制点(x,y)及其在八分圆中的另外7个对称点*/if(d)d=2*x 3;根据误差项d的判断,决定非最大位移方向上是走还是不走*/else{ d=2*(x-y)5;y-;}x;delay(900000);}/*while*/}main(){int i,j,r,graphmode,graphdriver;detectgraph(&graphdriver,&graphmode);initgraph(&graphdriver,&graphmode,\"\");printf(\"中点Bresenhamcircle算法画圆的程序\\n\");提示信息*/printf(\"注意|r|);printf(\"\\n输入半径值 r:\");scanf(\"%d\",&r);printf(\"按任意键显示图形.\");getch();cleardevice();setbkcolor(BLACK);for(i=20;i;i=20)/*使用双循环画点函数画出表格中的纵坐标。求代码注释:计算机图形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢 #includedefine WIDTH 400define HEIGHT 400includedefine ColoredVertex(c,v)do{ glColor3fv(c);glVertex3fv(v);}while(0)/这段就不用解释了吧…GLfloat angle=0.0f;设定转角void myDisplay(void)/绘图函数{static int list=0;if(list=0){如果显示列表不存在,则创建GLfloat/GLfloat为OpenGL用到的数据类型,与C的float基本一致PointA[]={-0.5,-5*sqrt(5)/48,sqrt(3)/6},/此处为4个顶点的坐标,因为时3D坐标系下的,所以每个坐标有3个分量,分别对应X,Y,Z轴。至于各轴方向定义…默认下屏幕水平为X,竖直为Y,里外为Z。PointB[]={ 0.5,-5*sqrt(5)/48,sqrt(3)/6},PointC[]={ 0,-5*sqrt(5)/48,-sqrt(3)/3},PointD[]={ 0,11*sqrt(6)/48,0};GLfloatPointA[]={ 0.5f,-sqrt(6.0f)/12,-sqrt(3.0f)/6},PointB[]={-0.5f,-sqrt(6.0f)/12,-sqrt(3.0f)/6},PointC[]={ 0.0f,-sqrt(6.0f)/12,sqrt(3.0f)/3},PointD[]={ 0.0f,sqrt(6.0f)/4,0};GLfloatColorR[]={1,0,0},/定义颜色数组,每个数组为一个颜色,也含有3个分量,对应红,绿,蓝,分量范围[0,1],每种颜色都可看做是这3个颜色混合得到。可一自己改变下其中的数值看看具体效果。ColorG[]={0,1,0},。

#计算机图形学#正弦曲线

随机阅读

qrcode
访问手机版