C语言中的pieslice()函数

3
如何使用函数 pieslice() 在 C 中绘制一个主要的饼图部分?
pieslice(X-centre,Y-centre,StrtAngle,EndAngle,Radius).

我正在尝试使用pieslice函数在C语言中绘制主扇形或饼图,我想让起始角度为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);

但是所有的图形都绘制了相应的小扇区而不是大扇区。有人能告诉我如何做到这一点吗?
这是输出的截图:


感谢您的努力和时间。
现在,我无法使pieslice按照我的方式工作。 但是通过以下微调,我能够解决问题并获得所需的输出。 我编写了一个用户定义函数slice(int x-center,int y-center,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);
 }
}

@Dave 我正在Windows平台上使用TurboC图形库。 - TruckDriver
@dave 是的,那是一个打字错误。 - TruckDriver
@thrustmaster:我在Windows平台上使用TurboC图形库。 - TruckDriver
@Timothy:已经过去十多年了,但我认为如果您在“pieslice”函数上使用光标并按下CTRL-F1,它将显示一个帮助屏幕,展示如何调用它。 - Dave Jarvis
@dave: 就连Robin的解决方案也不起作用 :( - TruckDriver
显示剩余3条评论
2个回答

2

使用相同的中心和半径绘制两个饼图,一个从0度到135度,另一个从225度到360度。似乎该函数强制饼图始终小于180度,因此应该围绕此进行操作。

另请参阅:http://electrosofts.com/cgraphics/


@Robin:救了我不用安装Turbo C。;-) - Dave Jarvis
@ Robin 和 Dave:非常感谢,我也尝试过了,但是这并没有解决问题。我得到了一个扇区,但它不像从 135 开始到 225 结束的那个,它是另外一种情况,请帮忙看看。 - TruckDriver
1
@Timothy:提供一些屏幕截图。使用http://imgur.com/。发布链接,不要尝试内联图像;其他人会为您内联它们。编辑以更新您的问题。 - Dave Jarvis
@dave:我已经上传了输出的截图,你在左上角看到的那个切片是Robin建议的那一个,http://postimage.org/image/1wytkbdic/。 - TruckDriver
你确定你没有误输入90度而不是左上角的135度吗? - Robin Green
@robin,不是罗宾,我确定我做了这个 pieslice(50,50,0,135,30); pieslice(50,50,225,0,30); - TruckDriver

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接