示例#1
0
文件: user.c 项目: amitn7/OSlabs
	int main()
	{
		struct Coord top, left, right;
		left.x = -1;
		left.y = 1;
		top.x = 0;
		top.y = -1;
		right.x = 1;
		right.y = 1;
		
		drawSierpinski(0, left, top, right);
		printf("index = %d, %d\n", index, rand_interval(0,255));
		int tri = 0;
		for (int i = 0; i < 120; i++){
			for (int j = 0; j < 2; j++){
				printf("(%f,%f,%d) ", verticesX[i][j], verticesY[i][j], rand_interval(0, 255));
			}
			printf("\nColor = (%f,%f,%f)", colors[i][0], colors[i][1], colors[i][2]);
			
			
			getch();
			printf("\n");
		}
		
		getch();
	}
示例#2
0
文件: user.c 项目: amitn7/OSlabs
void drawSierpinski(int iter, struct Coord a, struct Coord b, struct Coord c)
{
	
	if (iter >= 8)  // if lines are only 2 pixels in length
	{
		return;
	}
	else
	{
		drawSierpinski(iter + 1, a, mid(a, b), mid(a, c));
		verticesX[index][0] = a.x;
		verticesX[index][1] = mid(a, b).x;
		verticesX[index][2] = mid(a, c).x;
		verticesY[index][0] = a.y;
		verticesY[index][1] = mid(a, b).y;
		verticesY[index][2] = mid(a, c).y;
		colors[index][0] = scale(rand_interval(0, 255),0,255,0,1);
		colors[index][1] = scale(rand_interval(0, 255), 0, 255, 0, 1);
		colors[index][2] = scale(rand_interval(0, 255), 0, 255, 0, 1);
		drawSierpinski(iter + 1, mid(a, b), b, mid(b, c));
		index++;
		verticesX[index][0] = mid(a, b).x;
		verticesX[index][1] = b.x;
		verticesX[index][2] = mid(b, c).x;
		verticesY[index][0] = mid(a, b).y;
		verticesY[index][1] = b.y;
		verticesY[index][2] = mid(b, c).y;
		colors[index][0] = scale(rand_interval(0, 255), 0, 255, 0, 1);
		colors[index][1] = scale(rand_interval(0, 255), 0, 255, 0, 1);
		colors[index][2] = scale(rand_interval(0, 255), 0, 255, 0, 1);
		drawSierpinski(iter + 1, mid(a, c), mid(b, c), c);
		index++;
		verticesX[index][0] = mid(a, c).x;
		verticesX[index][1] = mid(b, c).x;
		verticesX[index][2] = c.x;
		verticesY[index][0] = mid(a, c).y;
		verticesY[index][1] = mid(b, c).y;
		verticesY[index][2] = c.y;
		colors[index][0] = scale(rand_interval(0, 255), 0, 255, 0, 1);
		colors[index][1] = scale(rand_interval(0, 255), 0, 255, 0, 1);
		colors[index][2] = scale(rand_interval(0, 255), 0, 255, 0, 1);
	}

}
示例#3
0
void drawSierpinski(Point a, Point b, Point c, int level)
{   Point m0, m1, m2;
    //Example rendering function

    if (level > 0)
    {
        m0.x = (a.x+b.x) /2.0;
        m0.y = (a.y+b.y) /2.0;
        m1.x = (a.x+c.x) /2.0;
        m1.y = (a.y+c.y) /2.0;
        m2.x = (b.x+c.x) /2.0;
        m2.y = (c.y+b.y) /2.0;
        drawSierpinski(a,m0,m1,level-1);
        drawSierpinski(b,m2,m0,level-1);
        drawSierpinski(c,m1,m2,level-1);
    }
    else
        drawTriangle(a,b,c);
} // end draw Sierpinski
示例#4
0
void myMouse(int button, int state, int x, int y){

  const int size = 3;
  static int clickCount = 0;
  static GLIntPoint points[size];
  
  if(button == GLUT_LEFT_BUTTON && 
     state == GLUT_DOWN &&
     clickCount < size){
    
    points[clickCount].x = x;
    points[clickCount].y = HEIGHT - y;
    drawDot(points[clickCount]);
    clickCount++;
    if(clickCount == size){
      drawSierpinski(points,size);
    }
  }
}
示例#5
0
GLuint makeObject()
{
    //Preparing example rendering
    GLuint list;
    list = glGenLists(1);
    glNewList(list, GL_COMPILE);
    // set the initial color
    glColor3f( 1.0, 0.0, 0.0 );
    // points for triangle to draw Sierpinski Gasket
    Point a, b, c;
    a.x=-0.8f;
    a.y=-0.8f;
    b.x=0.8f;
    b.y=-0.8f;
    c.x=0.0f;
    c.y=0.8f;
    drawSierpinski(a,b,c,4);
    glEndList();
    return list;
} // end make object
示例#6
0
void GLDraw::drawSierpinski(int depth, float size, float modifier)
{

    glPushMatrix();
    if ( depth > 0 )
    {
        drawTriangle(size/3.0);
        drawSierpinski(depth-1, size/3.0, modifier);

        glTranslatef(size/3.0, 0.0f, modifier);
        drawTriangle(size/3.0);
        drawSierpinski(depth-1, size/3.0, modifier);

        glTranslatef(size/3.0, 0.0f, modifier);
        drawTriangle(size/3.0);
        drawSierpinski(depth-1, size/3.0, modifier);

        glTranslatef( -size + 0.5 * size, (sqrt(3) * size/3.0) / 2.0, modifier);
        drawTriangle(size/3.0);
        drawSierpinski(depth-1, size/3.0, modifier);

        glTranslatef( size/3.0, 0.0f, modifier);
        drawTriangle(size/3.0);
        drawSierpinski(depth-1, size/3.0, modifier);

        glTranslatef( -0.5 * size/3.0, (sqrt(3) * size/3.0) / 2.0, modifier);
        drawTriangle(size/3.0);
        drawSierpinski(depth-1, size/3.0, modifier);



        depth--;
    }

    glPopMatrix();

}