#include #include #include #include #include #include "biMap.h" using namespace std; #define PI 3.141592f #define FSIZE 600 #define KEYSTEPS 10 #define N_SEG 15 // the number of segments defining the circle #define DIA 4.787 // BASED ON A SQUARE SIZE OF 6.0 #define KEYCELL 15.0 #define KEYXOFFSET 450.0 #define KEYYOFFSET 50.0 biMap::biMap() { int i; float angle; field1 = new float*[FSIZE]; field2 = new float*[FSIZE]; for (i=0;i1.0) f1 = 1.0; hue = 0.7; hsvToRgb(hue,f1,1.0,r,g,b); glColor3f(r,g,b); glVertex2f(float(i),float(j)); glVertex2f(float(i+1),float(j)); } glEnd(); } glPopMatrix(); } void biMap::drawCircle(float x, float y, float s, float v) { // Design a better color scheme here. float r,g,b,hue; int i; if(v >1.0) v = 1.0; hue = 0.0; hsvToRgb(hue,v,1.0,r,g,b); glColor3f(r,g,b); glBegin( GL_TRIANGLE_FAN ); glVertex2f( x, y ); for ( i = 0; i < N_SEG; ++i ) { glVertex2f(x+ xpts[i]*s,y+ ypts[i]*s ); } glVertex2f(x+ xpts[0]*s, y+ ypts[0]*s ); glEnd(); } void biMap::drawCircleField() { int i,j; int start,end; float r,g,b; float x,y; start= FSIZE/4; end = FSIZE*3/4; glPushMatrix(); glColor3f(1.0,0.0,0.0); glScalef(1.333,1.333,1.0); glTranslatef(-start,-start,0.0); for(i=start+2;i<=end;i=i+6) { for(j=start+2;j<=end;j=j+6) { x = i; y = j; drawCircle(x, y,1.0, field2[i][j]); } } glPopMatrix(); } void biMap::mkMaps() { clear(); mkDataMap(field1); mkDataMap(field2); } void biMap:: mkDataMap(float **t) { int k,kx,ky; float sz,angle; float lx,ly; lx = 0.5*float(FSIZE); ly = 0.5*float(FSIZE); for (k = 0; k < 40; ++k) { kx = int(lx + MRand()*lx); ky = int(ly + MRand()*ly); sz = 90.0f + MRand()*32.0f; // 32-64; angle = (MRand()+0.5f)*180.0f; gabor(t, kx, ky, angle, sz, 0.1f*sz, 0.4f); } for (k = 0; k < 300; ++k) { kx = int(lx + MRand()*lx); ky = int(ly + MRand()*ly); sz = 40.0f + MRand()*16.0f; // 16-32; angle = (MRand()+0.5f)*180.0f; gabor(t, kx, ky, angle, sz, 0.06f*sz, 0.4f); } int i,j; for(i=0;i 1.0) t[i][j] = 1.0; } } void biMap :: gabor(float **t, int cx, int cy, float r, float size,float contrast,float rat) { //const int TPATCH = 50; float freq, prod; float cosr,sinr; float halfx,halfy; float x,y,gx,gy; int ix, iy, ccx, ccy; int TPATCH; TPATCH = size*2; ccx = cx - TPATCH/2; ccy = cy - TPATCH/2; r = r*PI/180.0f; sinr = float(sin(r)); cosr = float(-cos(r)); halfx = float(TPATCH)/2.0f; halfy = float(TPATCH)/2.0f; freq = 2.0f*PI/size; rat = 1.0f/(rat*2.0f*PI); rat = -rat*rat; for (ix=0;ix