<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->/*generatescontoursusingmarchingsquares*/
/*regionsize*/
#defineX_MAX1.0
#defineY_MAX1.0
#defineX_MIN-1.0
#defineY_MIN-1.0
/*numberofcells*/
#defineN_X50
#defineN_Y50
/*contourvalue*/
#defineTHRESHOLD0.0
#include<GL/glut.h>
voiddisplay()
{
doublef(double,double);
intcell(double,double,double,double);
voidlines(int,int,int,double,double,double,double);
doubledata[N_X][N_Y];
inti,j;
intc;
glClear(GL_COLOR_BUFFER_BIT);
/*formdataarrayfromfunction*/
for(i=0;i<N_X;i++)for(j=0;j<N_Y;j++)
data[i][j]=f(X_MIN+i*(X_MAX-(X_MIN))/(N_X-1.0),Y_MIN+j*(Y_MAX-(Y_MIN))/(N_Y-1.0));
/*processeachcell*/
for(i=0;i<N_X;i++)for(j=0;j<N_Y;j++)
{
c=cell(data[i][j],data[i+1][j],data[i+1][j+1],data[i][j+1]);
lines(c,i,j,data[i][j],data[i+1][j],data[i+1][j+1],data[i][j+1]);
}
glFlush();
}
/*definefunctionf(x,y)*/
doublef(doublex,doubley)
{
doublea=0.49,b=0.5;
/*OvalsofCassini*/
return(x*x+y*y+a*a)*(x*x+y*y+a*a)-4*a*a*x*x-b*b*b*b;
}
/*definecellvertices*/
intcell(doublea,doubleb,doublec,doubled)
{
intn=0;
if(a>THRESHOLD)n+=1;
if(b>THRESHOLD)n+=8;
if(c>THRESHOLD)n+=4;
if(d>THRESHOLD)n+=2;
returnn;
}
/*drawlinesegmentsforeachcase*/
voidlines(intnum,inti,intj,doublea,doubleb,doublec,doubled)
{
voiddraw_one(int,int,int,double,double,double,double);
voiddraw_adjacent(int,int,int,double,double,double,double);
voiddraw_opposite(int,int,int,double,double,double,double);
switch(num)
{
case1:case2:case4:case7:case8:case11:case13:case14:
draw_one(num,i,j,a,b,c,d);
break;
case3:case6:case9:case12:
draw_adjacent(num,i,j,a,b,c,d);
break;
case5:case10:
draw_opposite(num,i,j,a,b,c,d);
break;
case0:case15:break;
}
}
voiddraw_one(intnum,inti,intj,doublea,doubleb,doublec,doubled)
{
doublex1,y1,x2,y2;
doubleox,oy;
doubledx,dy;
dx=(X_MAX-(X_MIN))/(N_X-1.0);
dy=(Y_MAX-(Y_MIN))/(N_Y-1.0);
ox=X_MIN+i*(X_MAX-(X_MIN))/(N_X-1.0);
oy=Y_MIN+j*(Y_MAX-(Y_MIN))/(N_Y-1.0);
switch(num)
{
case1:case14:
x1=ox;
y1=oy+dy*(THRESHOLD-a)/(d-a);
x2=ox+dx*(THRESHOLD-a)/(b-a);
y2=oy;
break;
case2:case13:
x1=ox;
y1=oy+dy*(THRESHOLD-a)/(d-a);
x2=ox+dx*(THRESHOLD-d)/(c-d);
y2=oy+dy;
break;
case4:case11:
x1=ox+dx*(THRESHOLD-d)/(c-d);
y1=oy+dy;
x2=ox+dx;
y2=oy+dy*(THRESHOLD-b)/(c-b);
break;
case7:case8:
x1=ox+dx*(THRESHOLD-a)/(b-a);
y1=oy;
x2=ox+dx;
y2=oy+dy*(THRESHOLD-b)/(c-b);
break;
}
glBegin(GL_LINES);
glVertex2d(x1,y1);
glVertex2d(x2,y2);
glEnd();
}
voiddraw_adjacent(intnum,inti,intj,doublea,doubleb,
doublec,doubled)
{
doublex1,y1,x2,y2;
doubleox,oy;
doubledx,dy;
dx=(X_MAX-(X_MIN))/(N_X-1.0);
dy=(Y_MAX-(Y_MIN))/(N_Y-1.0);
ox=X_MIN+i*(X_MAX-(X_MIN))/(N_X-1.0);
oy=Y_MIN+j*(Y_MAX-(Y_MIN))/(N_Y-1.0);
switch(num)
{
case3:case12:
x1=ox+dx*(THRESHOLD-a)/(b-a);
y1=oy;
x2=ox+dx*(THRESHOLD-d)/(c-d);
y2=oy+dy;
break;
case6:case9:
x1=ox;
y1=oy+dy*(THRESHOLD-a)/(d-a);
x2=ox+dx;
y2=oy+dy*(THRESHOLD-b)/(c-b);
break;
}
glBegin(GL_LINES);
glVertex2d(x1,y1);
glVertex2d(x2,y2);
glEnd();
}
voiddraw_opposite(intnum,inti,intj,doublea,doubleb,
doublec,doubled)
{
doublex1,y1,x2,y2,x3,y3,x4,y4;
doubleox,oy;
doubledx,dy;
dx=(X_MAX-(X_MIN))/(N_X-1.0);
dy=(Y_MAX-(Y_MIN))/(N_Y-1.0);
ox=X_MIN+i*(X_MAX-(X_MIN))/(N_X-1.0);
oy=Y_MIN+j*(Y_MAX-(Y_MIN))/(N_Y-1.0);
switch(num)
{
case5:
x1=ox;
y1=oy+dy*(THRESHOLD-a)/(d-a);
x2=ox+dx*(THRESHOLD-a)/(b-a);
y2=oy;
x3=ox+dx*(THRESHOLD-d)/(c-d);
y3=oy+dy;
x4=ox+dx;
y4=oy+dy*(THRESHOLD-b)/(c-b);
break;
case10:
x1=ox;
y1=oy+dy*(THRESHOLD-a)/(d-a);
x2=ox+dx*(THRESHOLD-d)/(c-d);
y2=oy+dy;
x3=ox+dy*(THRESHOLD-a)/(b-a);
y3=oy;
x4=ox+dx;
y4=oy+dy*(THRESHOLD-b)/(c-b);
break;
}
glBegin(GL_LINES);
glVertex2d(x1,y1);
glVertex2d(x2,y2);
glVertex2d(x3,y3);
glVertex2d(x4,y4);
glEnd();
}
voidmyReshape(intw,inth)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)gluOrtho2D(X_MIN,X_MAX,Y_MIN*(GLfloat)h/(GLfloat)w,Y_MAX*(GLfloat)h/(GLfloat)w);
elsegluOrtho2D(X_MIN*(GLfloat)w/(GLfloat)h,X_MAX*(GLfloat)w/(GLfloat)h,Y_MIN,Y_MAX);
glMatrixMode(GL_MODELVIEW);
}
intmain(intargc,char**argv)
{
glutInit(&argc,argv);
glutInitWindowSize(500,500);
glutCreateWindow("contourplot");
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glClearColor(0.0,0.0,0.0,1.0);
glColor3f(1.0,1.0,1.0);
glutMainLoop();
}
分享到:
相关推荐
二次误差测度 边折叠 递进网格 细节层次
天地测控资源调度的两阶段递进遗传算法.pdf
针对高光谱遥感图像中可能并不存在图像端元这一问题,试探的提出一种基于线性混合模型下对初步 提取的最近似于端元的像元进行再分析的端元提取算法,即高光谱遥感图像的端元递进提取算法。
机器学习中的多侧面递进算法MIDA.pdf
多侧面递进算法在机器学习中的应用.pdf
摘要:在基于深度图的虚拟图像绘制(DIBR)中,前景物体的遮挡会造成虚拟图像中的空洞问题.针对Criminisi算法及模板匹配对空洞边界噪声敏感的问题, 提出一
可编程逻辑阵列分段递进优化布局算法研究.pdf
在边折叠的网格简化算法的基础上,针对特定三维网格模型—人脸,提出了一种实用的基于特征点的快速模型简化算法。该算法把人脸按特征点的分布进行分块处理,对不同区域采用不同的阈值进行调节。对于需要高细节的区域...
论文研究-递进多目标遗传算法.pdf,
基于LOD的TIN地形算法的研究与实现,任远红,,三维真实感地形的实时生成是室外场景渲染引擎的核心部分。本文主要研究了与视点相关的递进网格(VDPM)算法,详细地剖析了其算法思想
递进多目标粒子群算法的设计及应用.pdf
然后使用XML语言对其承载的传统中医知识进行存储与表达,重点利用基于改进的二次误差度量和递进网格算法实现铜人多分辨率简化模型的自动生成;最后利用Unity引擎开发了一套针灸铜人虚拟交互展示系统,实现了穴位、...
分递进层法的粒子群优化算法.pdf
编程之法:面试和算法心得 高清带完整书签201510版 程序员面试宝典 笔试金典 CSDN访问量过千万的博客结构之法算法之道博主July著作 作者:July 著出版社:人民邮电出版社出版时间:2015年10月 《编程之法:面试和算法...
简洁的递进关系PowerPoint流程图
粒子群算法的新改进思想—递进式搜索.pdf
为解决这个问题我们用拉普拉斯金字塔算法和哈尔变换算法实现了纹理递进传输.实验结果和测试数据表明,这两种算法都有效地减少了初始传输延时.但是拉普拉斯金字塔算法增加了表示一幅纹理贴图所需的数据量,而哈尔变换...
论文研究-混合递进多目标进化算法及其在flow shop 排序中的应用.pdf,