2015-11-05 68 views
0

我正在試驗Java圖形AWT版本,而不是擺動(目前)。我的頭部一側有「頭髮」,在這個世界上,我是如何在另一側獲得同樣的位置,彎曲另一個方向?JAVA圖形,drawArc

我已經嘗試了很多組合,它從來沒有像它那樣在那裏和我感到沮喪。

public class main extends Applet { 
public void init() { 
    // Customized Colors 
    Color wallColor = new Color(76, 70, 70); 

    // Applet Size 
    setSize(1500, 900); 
    // Set Applet Background Color 
    setBackground(wallColor); 
} 

public void stop() { 

} 

public void paint(Graphics g) 
{ 
    // Custom Colors 
    Color pictureFrame = new Color(188, 198, 204); 


    // Picture Frames 

    g.setColor(pictureFrame); 
    g.fillRect(50,50,300,450); 
    g.setColor(Color.BLUE); 
    g.fillRect(75,75,250,400); 


    //Face 
    g.setColor(Color.WHITE); 
    g.fillOval(120,120,170,170); 

    //Hair 
    g.setColor(Color.BLACK); 
    g.drawArc(195, 125, 70, 553, 0, 90); 
    g.drawArc(195, 125, 75, 553, 0, 90); 
    g.drawArc(195, 125, 80, 553, 0, 90); 
    g.drawArc(195, 125, 85, 553, 0, 90); 
    g.drawArc(195, 125, 90, 553, 0, 90); 
    g.drawArc(195, 125, 95, 553, 0, 90); 
    g.drawArc(195, 125, 100, 553, 0, 90); 
    g.drawArc(195, 125, 105, 553, 0, 90); 
    g.drawArc(195, 125, 110, 553, 0, 90); 
    g.drawArc(195, 125, 77, 553, 0, 90); 
    g.drawArc(195, 125, 77, 553, 0, 90); 
    g.drawArc(195, 125, 83, 553, 0, 90); 
    g.drawArc(195, 125, 87, 553, 0, 90); 
    g.drawArc(195, 125, 93, 553, 0, 90); 
    g.drawArc(195, 125, 97, 553, 0, 90); 
    g.drawArc(195, 125, 103, 553, 0, 90); 
    g.drawArc(195, 125, 107, 553, 0, 90); 
    g.drawArc(195, 125, 113, 553, 0, 90); 

} 
} 
+0

規模的'圖形'上下文由水平計劃中的'-1',演示[這裏](http://stackoverflow.com/questions/24522458/flipping-rotations-and-images/24523176#24523176)和[這裏](http:///stackoverflow.com/questions/13676364/flipping-shape-not-image/13676513#13676513)和[這裏](http://stackoverflow.com/questions/11911610/affine轉換 - 旋轉 - 如何做 - i-xlate旋轉和縮放在同一時間/ 11911758#11911758) – MadProgrammer

+0

我寧願通過執行g.drawArc方法做到這一點...是可能? – CodedMe

+0

當然,反轉所有的座標 – MadProgrammer

回答

0
g.fillOval(120, 120, 170, 170); 

頂部/左橢圓的是120和橢圓形的寬度是170,所以你的橢圓形的 「X」 中心點爲120 +(170/2)= 205。

接下來你試着畫出頭髮的「X」中心點的右側,使用70

g.drawArc(195, 125, 70, 553, 0, 90); 

弧寬度在這之前,讓我們通過在中心點繪製一個橢圓啓動。要計算你需要圍繞着205的橢圓形橢圓形的「X」位置,你會:

int ovalX = 205 - (70/2) = 170. 

然而,在你的情況,你想畫弧線偏離中心。您對195進行了硬編碼,這意味着您的偏移距離中心25。因此,您還需要從中心繪製頭髮的左側-25,或者在170 - 25 = 145的x偏移處繪製。

當您繪製頭髮的右側時,從角度0開始,爲90度。所以當你繪製左側時,你想以90度角開始90度。

放在一起所有的計算,你可以創建一個方法來幹髒活你:

private void drawHair(Graphics g, int ovalX, int offset, int width, int height) 
{ 
    int arcX = ovalX - (width/2); 

    // draw left hair 

    int leftX = arcX - offset; 
    g.drawArc(leftX, 125, width, height, 90, 90); 

    // draw right hair 

    int rightX = arcX + offset; 
    g.drawArc(rightX, 125, width, height, 0, 90); 
} 

所以使用的方法你的代碼可能是這樣的:

//Face 
g.setColor(Color.WHITE); 
g.fillOval(120, 120, 170, 170); 
int centerX = 120 + (170/2); 
int arcHeight = 553; 

//Hair 
g.setColor(Color.BLACK); 
drawHair(g, centerX, 25, 70, arcHeight); 
drawHair(g, centerX, 25, 74, arcHeight); 
// fill in the rest of your hair strands here 
// I would make the width divisible by two for complete symmetry.