`
jiayj198609
  • 浏览: 150075 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

用java随机画出两个圆,判断它们是否相交

    博客分类:
  • 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;  
     }  
  }  
分享到:
评论
2 楼 i2534 2010-11-26  
lzyzizi 写道
对JAVA绘图这块不是很了解,但是我看了下你的代码,你画的是两个圆,但是你确实拿两个Rectangle进行判断相交,这个是不是仅仅判断了两个圆的外接正方形吧。。。真的正确么?

我觉得圆相交很好判断
sqrt((x1-x2)^2 + (y1 - y2)^2) > (r1+r2) ?

此解为正解.不过不用sqrt,后面求平方要稍微好点.
1 楼 lzyzizi 2010-11-26  
对JAVA绘图这块不是很了解,但是我看了下你的代码,你画的是两个圆,但是你确实拿两个Rectangle进行判断相交,这个是不是仅仅判断了两个圆的外接正方形吧。。。真的正确么?

我觉得圆相交很好判断
sqrt((x1-x2)^2 + (y1 - y2)^2) > (r1+r2) ?

相关推荐

    java小球点击动画 碰撞效果 随机生成

    - **小球之间的碰撞**:可以使用几何方法来判断两个圆是否相交。如果两圆心的距离小于等于它们半径之和,那么两圆相交。 - **小球与边界碰撞**:检查小球的中心点是否越过了屏幕的边界。如果超过,就反向移动小球...

    java实现一个圆类.doc

    判断圆对象是否相交方法是圆类的一个重要方法,它将两个圆对象作为参数,判断它们是否相交。圆对象相交的判断依据是两个圆心之间的距离是否小于两个圆的半径之和。 判断圆对象是否包含方法 判断圆对象是否包含方法...

    java 二维数组 随机生成迷宫

    生成迷宫的过程通常分为两个主要步骤:分割和随机选择路径。 1. **分割**:初始化一个完全连通的二维数组,即所有相邻的节点之间都有路径。这可以通过将数组的所有水平和垂直边标记为“墙”来实现,而交叉点则代表...

    基于java-GUI随机碰撞游戏

    例如,对于两个矩形的碰撞检测,可以检查它们的边界是否相交。对于更复杂的形状,可能需要使用更高级的算法,如分离轴定理(Separating Axis Theorem)。 最后,游戏循环是保持游戏运行的关键。通常使用一个`while`...

    基于java的多球弹射

    对于二维空间中的圆形,你可以使用几何方法判断两个圆是否相交。一旦检测到碰撞,就需要计算出碰撞后的反向速度。 7. **颜色变换**:Java提供了Color类来处理颜色。每次球碰撞边界时,可以通过修改Color对象的RGB值...

    用JAVA实现的布线问题求解

    在这个场景中,我们讨论的是用Java语言来解决这类问题。 首先,我们需要理解问题的数学模型。布线问题通常可以表示为图论中的旅行商问题(Traveling Salesman Problem, TSP)或最小生成树问题(Minimum Spanning ...

    坦克游戏java基础.zip

    这可能涉及到坐标系统的理解,以及如何判断两个矩形、圆形或其他形状是否相交。碰撞后的反应,如伤害计算、得分更新等,也需要通过编程逻辑来实现。 最后,为了使游戏更具挑战性,AI(人工智能)可能被引入。即使是...

    飞机大战代码 java编写

    游戏中的碰撞检测是关键部分,可以使用矩形碰撞检测算法,即比较两个矩形的边界是否相交。对于子弹与敌机的碰撞,我们可以在每次游戏循环中遍历所有的子弹和敌机,进行一一比较。 7. **游戏状态管理**: 游戏需要...

    java游戏坦克大战

    同时,坦克的碰撞检测也是一个难点,可能需要用到几何学知识,比如判断两个矩形是否相交。 游戏中的子弹发射与轨迹跟踪,涉及到动态物体的模拟。子弹的发射速度、方向以及击中目标的判断都需要精确计算。此外,游戏...

    Java常见算法大全

    - 最长公共子序列(LCS):找出两个序列中长度最长的不相交子序列。 - 矩阵链乘法:计算多个矩阵相乘的最小代价。 5. **数据结构**: - 数组:基础数据结构,支持随机访问但插入和删除操作较慢。 - 链表:每个...

    用Java语言写的小游戏——雷霆战机,单机游戏,不能联网,可以直接导入eclipse运行.zip

    Java游戏开发通常基于Swing或JavaFX图形用户界面库,这两个库提供了丰富的组件和工具来创建交互式图形界面。在这个游戏中,开发者可能使用了Swing,因为它对于小型桌面游戏更为常见。游戏的核心部分可能由多个类组成...

    数据结构java版

    8. **并查集**和**字典树**:并查集用于维护一组不相交集合的操作,如判断元素是否属于同一集合。字典树(Trie)是用于字符串查找的数据结构,可以快速查询是否存在某个前缀。 在Java中实现这些数据结构时,需要...

    java常见算法汇总

    - 最长公共子序列(LCS):找到两个序列最长不相交的部分。 - 最短路径问题:如Floyd-Warshall算法求解所有节点间的最短路径。 5. **图论算法**: - 广度优先搜索(BFS):用于寻找最短路径,如查找树的层次遍历...

    基于K-Means的文本聚类(Java实现)

    这个过程包括两个步骤:初始化簇中心和重新分配数据点。在文本聚类中,我们通常将文本表示为向量,例如使用TF-IDF或者词袋模型。 在Java实现中,我们首先需要处理文本预处理步骤,包括去除停用词、词干提取和词形...

    求平面两条线段交点效果演示

    6. **程序实现**:"求线段与线段交点效果演示.exe"程序可能采用了上述方法,通过编程语言(如C++、Python或Java)实现,将随机生成的线段在屏幕上绘制出来,并实时显示判断结果和交点坐标,提供了一个直观的交互式...

    lineEllipse:获取直线与椭圆/圆的交点-matlab开发

    该函数给出直线和椭圆的交点。... % 直线的两个随机点 [C1,C2] = lineEllipse(a,b,O,A,B); % GEt 交点 %% 阴谋th = linspace(0,2*pi) ; x = O(1)+a*cos(th) ; y = O(2)+b*sin(th) ; 数字情节(x,y) 坚持,稍

Global site tag (gtag.js) - Google Analytics