画一只蜘蛛

时间:2016-04-20 22:12:04

标签: java swing graphics drawing

我需要使用Graphics包绘制一个蜘蛛。但问题是它的大小,腿和眼睛的数量是由用户指定的。

我有几个问题:

  1. 如何在圆圈上随机选择一个点,以便我可以从那里画一条线(用于腿),同时记住drawLine(),例如,只接受整数参数?
  2. 如何在用作眼睛中心的圆圈内随机选择一个点,使圆圈(眼睛)适合外圈(身体)的范围?

2 个答案:

答案 0 :(得分:3)

选择圆上的点只需要获得一个随机角度。 Java使用弧度来表示它的三角函数,因此0到1之间的随机双精度乘以2π。

Random r = new Random();
double angle = r.nextDouble() * Math.PI * 2;

绘图腿是简单的三角法,需要找到每条线的x和y。为此使用sine and cosine functions。然后可以从圆的中心点(centerX and centerY)绘制线条,以指定的长度(legLength)结束。

可以重复该过程以绘制具有指定偏移量(legOffset)的多条腿并重复并再次偏移(通过π)以在另一侧绘制腿部。

for (int i = 0; i < 4; i++) {
    int lineX = (int) radius * Math.cos(angle);
    int lineY = (int) radius * Math.sin(angle));

    g.drawLine(circleX + lineX , circleY + lineY , circleX + lineX * legLength, circleY + lineY * legLength);
    angle += legOffset;
}
拉扯眼睛的过程基本上与腿部相同。每只眼睛都可以指定的角度和距离圆心的距离绘制。

int eyeX = (int) distance * Math.cos(angle);
int eyeY = (int) distance * Math.sin(angle));
g.fillOval(eyeX - eyeRadius, eyeY - eyeRadius, eyeRadius* 2, eyeRadius* 2);

答案 1 :(得分:1)

获取随机整数的最简单方法是创建Random的实例,并使用random.nextInt(bound)获得0(包括)和绑定(不包括)[0, bound)之间的整数。< / p>

不是选择蜘蛛的左上角,而是随机选择蜘蛛的中心,然后绘制与之相关的所有内容。

现在让我们定义半径r = size / 2

  1. 选择一个随机点,确保蜘蛛完全可见:

    x = r + random.nextInt(width - 2 * r);
    y = r + random.nextInt(height - 2 * r);
    
  2. 绘制直径为r而不是2r的身体,以确保腿部可见:g.fillOval(x - r / 2, y - r / 2, r, r);

  3. 绘制腿部和眼睛:有很多策略,你可以从中心画出长度为r的腿部线条和距离中心距离为r/4的非常小的圆圈。眼睛。选择初始随机角度后,您可以使用黄金角度计算下一条腿/眼睛的位置,这样可以确保它们不会在同一位置(https://en.wikipedia.org/wiki/Golden_angle)绘制。

  4. 注意:首先画腿,然后是身体和眼睛。