gpt4 book ai didi

java - 如何确保在 JFrame 上随机位置绘制的点不会与已绘制的形状重叠?

转载 作者:行者123 更新时间:2023-12-01 12:42:56 25 4
gpt4 key购买 nike

我使用随机函数在 JPanel 上的随机位置创建 100 个粒子来计算 x 和 y。但我在面板上还绘制了两个矩形,我不希望我的点重叠在该区域上。

有什么方法可以在整个 JPanel 上创建除矩形覆盖的区域之外的粒子吗?

            int x,y=0;
super.paintComponent(g);

for(int i=0;i<list.size();i++)
{
x=randomInteger(11,670); // bounds of x between which the particles should be generated (reduced by 1 each)
y=randomInteger(11,440); // bounds of y between which the particles should be generated (reduced by 1 each)
int radius = 4;
g.fillOval(x, y, radius, radius);
}

x=randomInteger(11,670);
y=randomInteger(11,440);

drawRobot(g,x,y,50);
createObstacles(g,150,225,100,40);
createObstacles(g,500,300,40,100);

int xpoints[] = {50, 40, 60, 120};
int ypoints[] = {50, 75, 100, 130};
int npoints = 4;
createPolygonObstacle(g,xpoints,ypoints,npoints);

}

private void createPolygonObstacle(Graphics g, int xpoints[], int ypoints[], int npoints)
{
g.fillPolygon(xpoints, ypoints, npoints);
}

private void createObstacles(Graphics g, int x, int y, int width, int height)
{
g.setColor(Color.BLACK);
g.fillRect(x, y, width, height);
}

private void drawRobot(Graphics g, int x, int y, int radius)
{
g.setColor(Color.GREEN);
g.fillOval(x, y, radius, radius);
}

private static int randomInteger(int min, int max)
{
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}

最佳答案

您可以利用Shape API...

Rectangle rect = new Rectangle (x, y, width, height);

然后您可以使用它的 contains 方法来确定它是否包含给定点...

if (rect.contains(x, y)) {
// You bad little particle...
}

您还应该知道 Graphics2D 还可以绘制和绘制 Shape,因此您也可以执行...

((Graphics2D)g).fill(rect);

这应该会让你的生活变得更轻松。从 Java 1.4 开始(我认为),绘画引擎保证使用 Graphics2D,因此您的 PaintComponent 方法将始终接收 Graphics2D 的实例> 对象。

看看2D Graphics了解更多详情

关于java - 如何确保在 JFrame 上随机位置绘制的点不会与已绘制的形状重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24923901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com