JAVA图形,drawArc

时间:2015-11-05 04:16:53

标签: java graphics awt

我正在尝试Java图形AWT版本,而不是摆动(目前)。我有"头发"在头部的一侧,在世界上,我是否在另一侧获得相同的位,向另一个方向弯曲?

我已经尝试了很多种组合,它从来没有像在那里那样结果而且我很沮丧。

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

}
}

1 个答案:

答案 0 :(得分:0)

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

椭圆的顶部/左边是120,椭圆的宽度是170,所以椭圆的“x”中心点是120 +(170/2)= 205。

接下来,您尝试使用70的弧宽在“x”中心点的右侧绘制头发。

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

在此之前,让我们先从中心点画一个椭圆。要计算椭圆的“x”位置,你需要将椭圆置于205左右。所以你会得到:

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.