JAVA 图形,drawArc

JAVA graphics, drawArc

我正在试验 Java 图形 AWT 版本,而不是 swing(暂时)。我的头的一侧有 "Hair",我怎么能在另一侧得到同样的位,向另一个方向弯曲?

我试过很多组合,但结果从来没有像那边那样,我很沮丧。

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

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

椭圆的top/left是120,椭圆的宽度是170,所以你的椭圆的"x"中心点是120+(170/2)=205。

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

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

在此之前,让我们先在中心点画一个椭圆。要计算椭圆的 "x" 位置,您需要将椭圆居中放置在 205 左右。因此您将拥有:

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

但是,在您的情况下,您希望绘制圆弧偏离中心的位置。您硬编码了 195,这意味着您的偏移距中心 25。因此,您还需要从中心绘制头发的左侧 -25,或者 x 偏移量为 170 - 25 = 145。

当您绘制头发的右侧时,您从角度 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.