2011-04-16 166 views
2

如何使用函數pieslice()在C中繪製主要的pieslice?C中的pieslice()函數

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

我想畫在C主要部門或pieslice,使用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按照我的方式工作。但是,通過以下調整,我可以解決問題並獲得所需的輸出。我寫了一個類似pieslice的用戶定義函數slice(int x-centre, int y-centre,int sangle, int eangle, int radius)。 我希望它是爲那些誰陷入了類似的一種情況有用:

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); 
} 
} 
+0

@Timothy:你在使用什麼圖形庫? Borland公司?你看到什麼錯誤信息?你能告訴我們你是如何在代碼中調用函數嗎? (另外:第二次打電話給'pieslice'有一個錯字。) – 2011-04-16 09:44:10

+1

Turbosaurus,有沒有機會? – SuperSaiyan 2011-04-16 09:44:28

+0

@Dave我在Windows平臺上使用turboc圖形庫 – TruckDriver 2011-04-16 09:45:29

回答

2

畫兩個圓形切片具有相同圓心和半徑,一個從0到135度,和一個從225度到0度。看起來這個功能迫使餅片始終小於180度,所以這應該可以解決這個問題。

參見:http://electrosofts.com/cgraphics/

+0

@Robin:從安裝Turbo C.保存我;;) – 2011-04-16 09:53:00

+0

@羅賓和戴夫:非常感謝,我也嘗試過,但即使這並沒有解決問題,我得到一個部門,但它不像135開始,結束於225,不同的東西,請看看它 – TruckDriver 2011-04-16 09:57:42

+1

@Timothy:提供一些屏幕截圖。使用http://imgur.com/。張貼鏈接,不要嘗試內聯圖片;其他人會爲你插入它們。編輯以更新您的問題。 – 2011-04-16 10:46:05

0

這裏是使用pieslice我的遊戲循環。 pacman來回移動。

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