예제 #1
0
파일: prim2d.c 프로젝트: Almamu/homeworld
// FIXME
void primCircleSegment(uword cx, uword cy, uword r, color c)
{
    int x, y;
    real32 d;

    x = 0;
    y = r;
    d = (real32)5/(real32)4 - (real32)r;
    CirclePoints(x, y, c, cx, cy);
    while (y > x)
    {
        if (d < 0)
        {
            d = d + 2*x + 3;
            x++;
        }
        else
        {
            d = d + 2*(x-y) + 5;
            x++;
            y--;
        }
        CirclePoints(x, y, c, cx, cy);
    }
}
//林宇强制作:根据圆的八对称关系,绘制八分之一圆弧即可通过CirclePoints绘制出整个完整圆
void MidPointCircle(int r,CDC* pDC) {
	int x, y;
	float d;
	x = 0;
	y = r;
	d = 1.25 - r;
	CirclePoints(x, y,100,100, pDC);
	while (x <= y) {
		if (d < 0) {
			d += 2 * x + 3;
		}
		else {
			d += 2 * (x - y) + 5;
			y--;
		}
		x++;
		CirclePoints(x , y,100,100, pDC);
	}
}
예제 #3
0
/*----------------------------Bresenham算法生成圆-----------------------------*/
void DrawCircle(int centreX, int centreY, int R, int mycolor)
{
    int x, y, delt, dHD, deltV, next;
    x = 0;
    y = R;
    delt = 2 * (1-R);
    while(y >= 0)
    {
        CirclePoints(x, y, centreX, centreY, mycolor);   /* 八分法 */
        if(delt < 0)
        {
            dHD = 2 * (delt + y) - 1;
            if(dHD <= 0)
            {
                next = 0;
            }
            else
            {
                next = 1;
            }
        }
        else if(delt > 0)
        {
            deltV = 2 * (delt - x) - 1;
            if(deltV <= 0)
            {
                next = 1;
            }
            else
            {
                next = 2;
            }
        }
        else
        {
            next = 1;
        }
        switch(next)
        {
            case 0: x++;
                    delt += 2 * x + 1;
                    break;
            case 1: x++;
                    y--;
                    delt += 2 * (x - y + 1);
                    break;
            case 2:y--;
                    delt += -2 * y + 1;
                    break;
        } /*switch*/
      }  /*while*/
}