【问题标题】:JAVA graphics, drawArcJAVA图形,drawArc
【发布时间】:2015-11-05 13:38:21
【问题描述】:

我正在试验 Java 图形 AWT 版本,而不是 Swing(目前)。我在头的一侧有“头发”,我怎么能在另一侧得到同样的头发,向另一个方向弯曲?

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

 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 缩放Graphics 上下文,演示了hereherehere
  • 我更喜欢通过 g.drawArc 方法来做到这一点......这可能吗?
  • 当然,反转所有坐标
  • 以哪种方式?反转如切换x并切换y?添加否定词?
  • 大概是你的x轴

标签: java graphics awt


【解决方案1】:
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.

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 2011-11-02
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多