3

関数を使用して、C で主要なパイスライスを描画するにはどうすればよいpieslice()ですか?

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

pieslice関数を使用して、C で主要なセクターまたはパイスライスを描画しようとしています。開始角度を 135 度、終了角度を 235 度にしたいのですが、同時にマイナー セクターではなくメジャー セクターにする必要があります。

4つの組み合わせをすべて試しました

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);

しかし、それらはすべて、主要なセクターではなく、対応するマイナーなセクターを描画します。誰かが私にそれを行う方法を教えてもらえますか?

出力のスクリーンショットを次に示します。


あなたの努力と時間をありがとう。

さて、私はパイスライスを思い通りに動かすことができませんでした。ただし、次の調整により、問題を回避して目的の出力を得ることができます。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);
 }
}
4

2 に答える 2

2

同じ中心と半径を持つ 2 つのパイ スライスを描画します。1 つは 0 ~ 135 度、もう 1 つは 225 ~ 0 度です。この関数は、パイのスライスを常に 180 度未満にするように強制しているように見えるので、これを回避する必要があります。

参照: http ://electrosofts.c​​om/cgraphics/

于 2011-04-16T09:51:27.970 に答える
0

ここに 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();
}
于 2013-09-23T10:26:01.490 に答える