我正在尝试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);
}
}
答案 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.