Java之碰撞检测

1.简介:

碰撞检测是计算机图形学和虚拟现实中最基本且非常重要的组成部分。它主要应用于:虚拟制造、CAD/CAM、计算机动画、物理建模、三维游戏、飞机和汽车驾驭模拟、机器人、路径和运动规划、装配。

2.碰撞处理:

碰撞检测(Collision  Detection):返回两个或多个物体是否发生碰撞的布尔判断。

碰撞确定(Collision  Determination):找到物体之间实际相交位置。

碰撞响应(Collision  Response):针对两个物体之间的碰撞决定采取何种操作。

/**
 * 碰撞检测测试,判断两个圆是否会发生碰撞
 *
 */
public class RectangleRiclesDemo extends JFrame implements Runnable {

    private static final long serialVersionUID = 1L;
    /* 定义两圆左上角坐标、半径 */
    private int x1 = 15, y1 = 45;
    private int x2 = 35, y2 = 70;
    private int r1 = 16, r2 = 18;

    public RectangleRiclesDemo() {
        setTitle("碰撞检测");
        setSize(200, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
        /* 画圆 */
        g.drawOval(x1, y1, 2 * r1, 2 * r1);
        g.drawOval(x2, y2, 2 * r2, 2 * r2);
    }

    @Override
    public void run() {
        /* 判断两圆是否相交 */
        // 两圆中心坐标
        int centerX1 = x1 + r1, centerY1 = y1 + r1;
        int centerX2 = x2 + r2, centerY2 = y2 + r2;
        // 求两圆的圆心距
        double length = Math.sqrt(Math.pow(centerX1 - centerX2, 2)
                + Math.pow(centerY1 - centerY2, 2));
        // 判断圆心距与两圆半径和的关系
        if (length < (r1 + r2)) {
            JOptionPane.showMessageDialog(null, "圆心距:" + length + ",碰撞了");
        } else {
            JOptionPane.showMessageDialog(null, "圆心距:" + length + ",未碰撞");
        }
    }

    public static void main(String[] args) {
        new Thread(new RectangleRiclesDemo()).start();
    }
}
时间: 2024-10-12 13:23:08

Java之碰撞检测的相关文章

Java游戏之碰撞检测

在进行Java游戏开发时,我们经常会遇到碰撞检测的问题.如坦克大战中,炮弹与坦克相遇发生爆炸:守卫者游戏中,守卫者发射的箭与怪物相遇使怪物失血:打飞机游戏中,飞机发送的子弹与敌机相遇干掉敌机.这些都需要实现碰撞检测. 我们先来看一类比较简单的碰撞检测:规则图形的碰撞检测. 矩形碰撞检测 作为一个练手的小游戏,游戏中的物体形状一般为矩形区域,这是规则图形.它的碰撞检测可以通过Java API中的Rectangle类来实现碰撞的检测. Rectangle指的是一个矩形区域,它通过指定左上角位置x和y

java 实现精确碰撞检测。

cnmm22 原创. [http://blog.csdn.net/cnmm22/article/details/45220551] 用我的方法,你可以在java 里实现精确的斜角矩形,平行四边形,不规则矩形,不规则多边形与圆形的碰撞检测. 我们知道,在java 里有一个类,x.getRect().intersects(x1.getRect() 可以实现规则矩形的碰撞检测: 这是无法容忍的"碰撞检测".这不是我要的游戏效果. 在使我的方法后: cnmm22 原创,转载请随便. 实现方法:

H5游戏开发之多边形碰撞检测(JAVA代码)

转载至:http://www.cnblogs.com/Kurodo/archive/2012/08/08/2628688.html 对于矩形碰撞,很多人都知道.但面对多边形图形,大多数采用多矩形覆盖的方式. 但是我不是很喜欢这种方式,我所采用的是利用一个经典算法: SAT 一种可以快速检测不规则的凸多边形是否碰撞的算法 给出两个凸多边形体,如果我们能找到一个轴线,使两物体在此轴线上的投影不重叠,则这两个物体之间没有发生碰撞,这个轴线叫做Separating Axis(红色轴线). 对于2D来说,

java图形界面写个小桌面,内置简单小软件

一.做个这样的效果,双击图标打开相应的应用 二.主界面类,使用JavaSwing的JDesktopPane类创建这个桌面 package com.swing; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.MouseAdapte

java实验三20135104

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计                         班级:1351            姓名:刘帅      学号:20135304 成绩:             指导教师:娄佳鹏              实验日期:2015.6.3 实验密级:         预习程度:             实验时间:15:00-21:00 仪器组次:10          必修/选修:             

13.4-全栈Java笔记:打飞机游戏实战项目|offScreenImage|GameObject|Plane

双缓冲技术解决闪烁问题 上节,我们实现了动画效果,但是发现窗口会不停的闪烁,体验度非常差.在实际开发中,绘制图形是非常复杂的,绘图可能需要几秒甚至更长时间,也经常发生闪烁现象, 为了解决这个问题,我们通常使用"双缓冲技术". 1)"双缓冲技术"的绘图过程如下: a. 在内存中创建与画布一致的缓冲区 b. 在缓冲区画图 c. 将缓冲区位图拷贝到当前画布上 e. 释放内存缓冲区 双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性

碰撞检测的Demo

看了李明华老师那本游戏入门, 碰撞检测哪个部分不知道为什么判断时候要多加上那几句,感觉不加上也是可以的呀???? 求指点 现在把demo发上来: MainActivity.java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(

java script 实现像素小鸟

用java script 实现像素小鸟 <html部分> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>flybird</title> <link rel="stylesheet" type="text/css" href="css/bird.css"/> &

Java小游戏之打飞机(二)

这篇文章本应昨天写的,可是真打算写的时候,CSDN博客维护,导致拖到了今天: 在上篇文章Java小游戏之打飞机(一)中已经详细介绍了该游戏的基本架构和需求分析,今天就详细写一写具体每个类的实现: 1)PlaneGameFrame类    ----游戏的主界面以及一些具体的飞机动作方法.碰撞检测等 代码: package plane; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java