锁定老帖子 主题:用java随机画出两个圆,判断它们是否相交
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (15)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-25
import java.awt.*; import java.util.Random; import javax.swing.*; import javax.swing.border.TitledBorder; /*** 7. * 随机画出两个圆,判断它们是否相交 8. * @author Firklaag 9. * @ver 0.01 10. * 编写代码实现同一平面内两圆是否碰撞,其中:第一个圆圆心坐标为(x1,y1), 半径是r1,第二个圆圆心坐标为(x2,y2), 半径是r2,数据结构自定义。 11. */ public class CheckCircul extends JFrame { //定义画布 private MyPanel myPanel = new MyPanel(); public CheckCircul() { add(myPanel); } public static void main(String[] args) { CheckCircul demo = new CheckCircul(); run(demo, 800, 700); } /* * 运行辅助方法 */ public static void run(final JFrame f, final int width, final int height) { SwingUtilities.invokeLater(new Runnable() { public void run() { f.setTitle(f.getClass().getSimpleName()); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(width, height); f.setVisible(true); } }); } } /* 40. * 画布类 41. */ class MyPanel extends JPanel { //定义标签 private JLabel label = new JLabel(); //定义随机数 private Random ran = new Random(); //定义两个圆 private Circul tom; private Circul jerry; /** 52. * 生成两个圆并增加标签到画布 53. */ public MyPanel() { tom = new Circul(ran.nextInt(300), ran.nextInt(300), ran.nextInt(400)); jerry = new Circul(ran.nextInt(300), ran.nextInt(300), ran.nextInt(400)); this.setBorder(new TitledBorder("CheckCircul")); add(label); } @Override protected void paintComponent(Graphics g) { //画出两个圆 Rectangle rec1 = tom.draw(g); Rectangle rec2 = jerry.draw(g); //判断其是否相交 if (rec1.intersects(rec2)) { label.setText("相交"); } else { label.setText("不相交"); } } } /** 76. * 定义圆形类,类中不仅有圆的属性,还有画圆的方法 77. */ class Circul { private int x; private int y; private int r; public Circul(int x, int y, int r) { this.x = x; this.y = y; this.r = r; } public Rectangle draw(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); //调用抗锯齿API g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.drawOval(x, y, r, r); return new Rectangle(x, y, r, r); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getR() { return r; } public void setR(int r) { this.r = r; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-11-26
对JAVA绘图这块不是很了解,但是我看了下你的代码,你画的是两个圆,但是你确实拿两个Rectangle进行判断相交,这个是不是仅仅判断了两个圆的外接正方形吧。。。真的正确么?
我觉得圆相交很好判断 sqrt((x1-x2)^2 + (y1 - y2)^2) > (r1+r2) ? |
|
返回顶楼 | |
发表时间:2010-11-26
lzyzizi 写道 对JAVA绘图这块不是很了解,但是我看了下你的代码,你画的是两个圆,但是你确实拿两个Rectangle进行判断相交,这个是不是仅仅判断了两个圆的外接正方形吧。。。真的正确么?
我觉得圆相交很好判断 sqrt((x1-x2)^2 + (y1 - y2)^2) > (r1+r2) ? 此解为正解.不过不用sqrt,后面求平方要稍微好点. |
|
返回顶楼 | |
发表时间:2010-11-26
判断两圆心距离与两圆的半径之和就可以了
|
|
返回顶楼 | |
发表时间:2010-11-26
jorneyR 写道 判断两圆心距离与两圆的半径之和就可以了
要看包含算不算相交 |
|
返回顶楼 | |
发表时间:2010-11-26
外离 外切 相交 内切 内含
一共5种情况 |
|
返回顶楼 | |
发表时间:2010-11-26
同学。。。你怎么把我的博客乱贴啊。。。
连注释都还是我的名字 没改 @author Firklaag 之前看你乱贴别人的,转载要说明啊 |
|
返回顶楼 | |
发表时间:2010-11-26
又开始 转载别人的 不加说明吗?
LZ你适可而止吧。 |
|
返回顶楼 | |
发表时间:2010-11-26
有人转了我的文章,我就顺便说一下,
这个东西是我面试时做的,一心只想快速完成,基本无难度。 |
|
返回顶楼 | |
发表时间:2010-11-26
楼主怎么这样啊?
|
|
返回顶楼 | |