用java随机画出两个圆,判断它们是否相交
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; } }3 楼 jorneyR 2010-11-26 判断两圆心距离与两圆的半径之和就可以了 4 楼 realcbb 2010-11-26 jorneyR 写道判断两圆心距离与两圆的半径之和就可以了
要看包含算不算相交 5 楼 su1216 2010-11-26 外离 外切 相交 内切 内含
一共5种情况 6 楼 Firklaag 2010-11-26 同学。。。你怎么把我的博客乱贴啊。。。
连注释都还是我的名字 没改 @author Firklaag
之前看你乱贴别人的,转载要说明啊 7 楼 aabcc 2010-11-26 又开始 转载别人的 不加说明吗?
LZ你适可而止吧。 8 楼 Firklaag 2010-11-26 有人转了我的文章,我就顺便说一下,
这个东西是我面试时做的,一心只想快速完成,基本无难度。 9 楼 haitaohehe 2010-11-26 楼主怎么这样啊? 10 楼 gundumw100 2010-11-26 初中数学没学好吧。 11 楼 softor 2010-11-26 今天才知道Javaeye还有这样的人啊~ 12 楼 爪哇岛岛主 2010-11-26 兄弟,你还要努力啊 13 楼 hjg1988 2010-11-27 如果真是这样,那得bs一下楼主 14 楼 elementstorm 2010-11-27 隐藏之...最讨厌这样的 15 楼 smzd 2010-11-27 哈哈,版权人找上门来了
16 楼 lzrzhao 2010-11-27 判断圆心的距离是否小于两个圆的半径之和就可以了 17 楼 tovenja 2010-11-27 如果内含呢 18 楼 jorneyR 2010-11-28 realcbb 写道jorneyR 写道判断两圆心距离与两圆的半径之和就可以了
要看包含算不算相交
是的,这个时间确实需要使用原心坐标和半径差来进一步判断。 19 楼 lwz777 2010-11-28 同一平面内,两圆的半径就可以做到! 20 楼 passionke 2010-11-28 转别人的文章是要说明清楚阿
不过原版人也V5 直接杀过来了 呵呵 21 楼 xiaotian8945 2010-11-28 在同一平面中:
A圆的半径为x,B圆的半径为y,两圆圆心距离为z。
如果x+y < z, 则两圆不相交;
如果x-y < z < x+y,则两圆相交;
如果|x-y| > z,则两圆内含。
LZ有空看看初中数学吧 22 楼 hyhyhy108 2010-12-02 找出圆心,计算两个圆心之间的距离是否小于等于两个圆的半径之和