- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个代码,其中我绘制了两个矩形作为障碍物和一个椭圆形作为机器人。机器人在障碍物静止时移动。问题在于机器人的位置一开始是随机生成的,有时会与矩形重叠。我一直在尝试解决这个问题,但我找不到好的解决方案。
我尝试在绘制之前用圆的 x,y 坐标检查矩形的边界。但是,它只检查那个单点,有时圆的其他一些点与矩形重叠。我尝试了 intersect 方法,但我无法在我的代码中实现它,因为我正在使用 fillOval 和 fillRect。
我知道这个问题已经在社区中被问过多次了。但是,所有的答案都围绕着 AWT 中的 intersect 方法。我没有使用矩形/椭圆类。我正在使用 fillRect 和 fillOval 来创建我的形状。在初始化方法中,这些形状是第一次随机绘制在 JPanel 上时,是否有任何其他方法可以防止碰撞。
代码:
public void initializePanel(Graphics g)
{
createObstacle(g,150,225,100,40);
createObstacle(g,500,300,40,100);
drawNParticles(g);
createRobot(g);
}
private void createRobot(Graphics g)
{
ArrayList<Integer> robot_list= new ArrayList<Integer>();
robot_list=positionRobot(robot_x,robot_y);
robot_x=robot_list.get(0);
robot_y=robot_list.get(1);
System.out.println("Robot:"+robot_x+"--"+robot_y+"--"+robot_orientation);
if((robot_x>620)||(robot_y>395)||(robot_x<1)||(robot_y<1))
{
robot_orientation=180;
}
drawRobot(g,robot_x,robot_y,robot_radius);
}
private ArrayList<Integer> positionRobot(int x, int y)
{
int robot_radius=50;
ArrayList<Integer> list= new ArrayList<Integer>();
if(counter==0)
{
x=randomInteger(25,655);//so that it stays inside the content_Walls panel
y=randomInteger(25,425); //so that it stays inside the content_Walls panel
x=x-(robot_radius/2);
y=y-(robot_radius/2);
robot_orientation=randomFloat(0,360);
if((x<251&&x>149)&&(y<266&&y>224))
{
x=0;
y=0;
positionRobot(x,y);
}
else if((x<=541&&x>499)&&(y<401&&y>299))
{
x=0;
y=0;
positionRobot(x,y);
}
counter++;
}
else
{
setXPosition_robot(robot_x);
setYPosition_robot(robot_y);
}
list.add(x);
list.add(y);
return list;
}
private void drawNParticles(Graphics g)
{
ArrayList<Integer> list;
list = new ArrayList<Integer>(Collections.nCopies(n, 0));
for(int i=0;i<list.size();i++)
{
generateParticle(g);
}
}
private void generateParticle(Graphics g)
{
int radius = 4;
ArrayList<Integer> list= new ArrayList<Integer>();
list=positionParticles(particle_x,particle_y);
g.setColor(Color.RED);
g.fillOval(list.get(0),list.get(1), radius, radius);
}
private ArrayList<Integer> positionParticles(int x, int y)
{
int radius = 4;
ArrayList<Integer> list= new ArrayList<Integer>();
x=randomInteger(2,678); // bounds of x between which the particles should be generated
y=randomInteger(2,448); // bounds of y between which the particles should be generated
x=x-(radius/2);
y=y-(radius/2);
if((x<251&&x>149)&&(y<266&&y>224))
{
x=0;
y=0;
positionParticles(x,y);
}
if((x<541&&x>499)&&(y<401&&y>299))
{
x=0;
y=0;
positionParticles(x,y);
}
list.add(x);
list.add(y);
return list;
}
private void createObstacle(Graphics g, int x, int y, int width, int height)
{
//g.setColor(Color.YELLOW);
//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 Random rand;
private static int randomInteger(int min, int max)
{
if(rand==null)
rand=new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
private static Random randFloat;
private static float randomFloat(float min, float max)
{
if(randFloat==null)
randFloat=new Random();
float randomNum = randFloat.nextFloat() *(max-min)+ min;
return randomNum;
}
最佳答案
I am not using the Rectangle/Ellipse classes. I am using fillRect and fillOval to create my shapes.
所以改变你的代码。
I tried checking the bounds of the rectangle with the x,y coordinate of circle before drawing it. But, it only checks for that single point and sometimes some other point of circle overlaps the rectangle.
确切地说,编写代码并不容易,这就是您应该利用现有 API 的原因。不要通过尝试编写自己的交集代码来重新发明轮子!我知道让所有的几何形状都正确超出了我的技能水平。
查看 Playing With Shapes对于不涉及使用 fillRect() 和 fillOval() 方法自己绘画的想法。
关于java - awt之无相交方法的圆与矩形碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107393/
以下是我所拥有的。 我唯一需要的是让顶部填充。所以 12 点钟它应该是一个填充,广告 6 点钟它应该以渐变结束。 实现这一目标的最佳方法是什么? (这个想法是让它在下一步中旋转。) Codepen
我用 Canvas 绘制了倒计时 工作代码:http://jsfiddle.net/ajFsx/ window.onload = function() { canvas = document
我是stagexl的新手,我知道这是非常基本的问题,但是我找不到真正快速的答案,因此我认为将这个答案提供给与我处于同一职位的任何人都很好。 如何在stagexl中创建从x到y的线? 以及如何创建一个以
我想知道以编程方式为图像制作圆 Angular 的最佳方法是什么。这可以使用 PHP 或 javascript。一个算法也可以做同样的事情,我可以用 Image::Magick 或 GD 对其进行编码
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this q
我有一组二维点。我想找到: 包含所有点的最小三角形 包含所有点的最小圆。 是否有任何算法可以做到这一点?我遇到了 Convex Hull 来为一组点拟合凸多边形。但我想要一个圆形和三角形。 提前致谢
如何计算两个圆的交点。我希望在所有情况下都有两个、一个或没有交点。 我有中心点的 x 和 y 坐标,以及每个圆的半径。 Python 中的答案是首选,但任何可用的算法都是可以接受的。 最佳答案 Int
我需要用 QPainter 画一个圆。当我像这样使用 drawEllipse 函数时: void UserClass::Draw(QPainter &painter) { painter.sa
计算几何问题: 在多边形(例如BCDE)的边(例如EB)上随机选择点P0,以找到可能的点(即, P1,P2,P3,...) 基于给定距离(即 r)在其他边上。下面的演示展示了一个解决方案,它通过找到以
这个问题在这里已经有了答案: 关闭 13 年前。 重复: What is the best way to create rounded corners How to make a cross bro
我有一个 ionic4 应用程序,我需要在其中实现类似于下面卡片中的 img 效果。在边缘模糊到中心,然后在中心用另一个白色边框清除 我怎样才能做到这一点?请忽略编辑图标 最佳答案 .card
我想旋转一个 SVG 圆圈,同时保持其他元素不旋转 当我尝试使用 rotateZ(15deg) 旋转圆(白色)时,这就是我得到的: 这是我目前的进展: https://jsfiddle.net/41h
我正在尝试根据时间戳实现 LineString 挤压。正如 github 中提到的,它应该被实现,但事实并非如此。它应该类似于下面的屏幕截图。 到目前为止,我发现可以对多边形使用挤压,但随后我必须以某
我用了this question我创建了像this这样的形状但现在我不知道如何在第一次单击时为每个圆圈设置文本? (如井字棋) 最佳答案 给你! - 为了方便起见,我合并了它。只需单击圆圈即可查看其上
如何判断圆和矩形在二维欧几里得空间中是否相交? (即经典的二维几何) 最佳答案 这是我的做法: bool intersects(CircleType circle, RectType rect) {
圆 A 沿 x 轴向右移动。圆 B 沿 y 轴向上移动。我想知道他们是否会发生碰撞。 (不是何时,只是如果。) 半径相同,恒速度不同。 This answer似乎解决了这个问题,我的问题最好应该是这个
Relevant Codesandbox 我一直在我的应用程序中看到一种模式,当我创建圆形的div时,当它们的尺寸较小时,它们有时似乎具有边缘。请参见下面突出显示的代码的图像。为什么会发生这种情况,有
目前,我在 c3.js 中生成的图表图例是颜色矩形,我想将其更改为圆形。我该怎么做? var chart = c3.generate({ data: { columns: [
我需要显示带有圆 Angular 的图像。很久以前,我看到一个网站使用 javascript 库执行此操作,该库将圆 Angular 图像覆盖在普通图像上。 我们是否有任何 javascript 库(
在我的程序中,我使用 css 设计了我的按钮样式。我正在使用“-fx-background-radius”来圆 Angular ,并注意到当我将鼠标悬停在原来的 Angular 上时,它允许我单击按钮
我是一名优秀的程序员,十分优秀!