функция pieslice () в C - PullRequest
       36

функция pieslice () в C

2 голосов
/ 16 апреля 2011

Как нарисовать крупный пирог в C, используя функцию pieslice()?

pieslice(X-centre,Y-centre,StrtAngle,EndAngle,Radius).

Я пытаюсь нарисовать крупный сектор или pieslice в C, используя функцию pieslice; Я хочу, чтобы начальный угол составлял 135 градусов, а конечный угол - 235 градусов, но в то же время это должен быть основной сектор, а не второстепенный сектор.

Я перепробовал все четыре комбинации

pieslice(100,100,135,-135,20)
pieslice(200,200,225,135,30)
pieslice(300,300,225,360+135,30)
pieslice(400,400,135,225,20)

pieslice(50,50,0,135,30);
pieslice(50,50,225,0,30);

Но все они рисуют соответствующий второстепенный сектор, а не основной. Может кто-нибудь посоветовать, пожалуйста, как это сделать?

Вот скриншот с выводом:

http://s4.postimage.org/906ozxj3u/phpu_Qu408.png


Спасибо за ваши усилия и время.

Теперь я не мог заставить pieslice работать по-своему. Однако с помощью следующей настройки я смог обойти проблему и получить желаемый результат. Я написал пользовательскую функцию slice(int x-centre, int y-centre,int sangle, int eangle, int radius), похожую на pieslice. Я надеюсь, что это полезно для тех, кто застрял в подобной ситуации:

void slice(int x, int y, int sangle, int eangle, int rad)
{
 int i,j,color;
 if(sangle>eangle){
  color=getcolor();
  setcolor(getcolor()) ;
  setfillstyle(SOLID_FILL,color);
  circle(x,y,rad);
  floodfill(x,y,color);
  setcolor(getbkcolor());
  setfillstyle(SOLID_FILL,getbkcolor());
  pieslice(x,y,eangle,sangle,rad);
  setcolor(color);
 }
}

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Нарисуйте два кусочка пирога с одинаковым центром и радиусом, один от 0 до 135 градусов, а другой от 225 до 0 градусов. Кажется, что функция заставляет кусочки пирога всегда быть меньше 180 градусов, так что это должно обойти это.

Смотри также: http://electrosofts.com/cgraphics/

0 голосов
/ 23 сентября 2013

вот мой игровой цикл с использованием pieslice. Пакман движется туда и сюда.

for (int dx = 10, dy = 0, dt = 100; c != 'q';) {
    if ((x + rx + dx) > getmaxx() || (x + rx + dx) < 0) {
    dx = -dx;
    rx = -rx;
    }
    if ((y + ry + dy) > getmaxy() || (y + ry + dy) < 0) {
    dy = -dy;
    ry = -ry;
    }
    delay(dt);
    cleardevice();
    //gotoxy(1,1);
    //cout << x+rx << " " << y+ry << " " << m;
    pieslice(x, y, (sa + m), (ea - m), RADIUS);
    //floodfill(x,y,getcolor());

    if (m + dm < 0 || m + dm > ea)
     dm = -dm;

    m += dm;

    x += dx;
    y += dy;
    if (kbhit())
     c = getch();
}
...