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.
我正在试验 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.