`

行矢量碰撞算法

    博客分类:
  • JAVA
阅读更多
package org.ernest.matrixText;

import java.util.Arrays;


public class CycSubtracter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		double [] a1={4,5,2};
		double [] a2={3,0,1};

		//rc(a1,a2,a1.length-1);
		rc(a1,a2);
		System.out.println(Arrays.toString(a1));
		System.out.println(Arrays.toString(a2));
	}
	/**
	 * 单行向量碰撞算法(递归算法)
	 * @param a
	 * @param b
	 * @param n
	 */
	public static void rc(double[] a,double[] b,int n){
		if(n<0)return;
		
		double[] s=new double[b.length];
		for(int i=0;i<b.length;i++){
			if(0==i){s[i]=b[i];}else{s[i]=s[i-1]+b[i];}
		}
		if(a[n]>s[s.length-1]){
			a[n]-=s[s.length-1];
			Arrays.fill(b,0.0);
			return;
		}else{
			int p=0;
			for(int i=0;i<s.length;i++){
				if(a[n]<=s[i]){p=i;break;}
			}
			Arrays.fill(b, 0,(p-1)<0?0:p,0.0);
			b[p]=s[p]-a[n];
			a[n]=0.0;
			rc(a,b,n-1);
		}	
	}
	
	/**
	 * 单行向量碰撞算法(循环算法)
	 * @param a
	 * @param b
	 */
	public static void rc(double[] a,double[] b){
		for(int n=a.length-1;n>=0;n--){
			double[] s=new double[b.length];
			for(int i=0;i<b.length;i++){
				if(0==i){s[i]=b[i];}else{s[i]=s[i-1]+b[i];}
			}
			if(a[n]>s[s.length-1]){
				a[n]-=s[s.length-1];
				Arrays.fill(b,0.0);
				return;
			}else{
				int p=0;
				for(int i=0;i<s.length;i++){
					if(a[n]<=s[i]){p=i;break;}
				}
				Arrays.fill(b, 0,(p-1)<0?0:p,0.0);
				b[p]=s[p]-a[n];
				a[n]=0.0;
			}
		}
	}

}

 

3
0
分享到:
评论

相关推荐

    大数据-算法-海流场矢量数据抽稀与表达.pdf

    线段相交方法:线段相交方法可以解决海流场矢量数据符号化过程中的符号互相压盖问题,但是在某些情况下不能有效地处理箭头的头部碰撞问题。 矢量箭头最小外包扇形缓冲区方法:矢量箭头最小外包扇形缓冲区方法是三种...

    基于矢量的三角网面体碰撞检测方法

    随后,详细阐述了如何通过矢量分析来进行碰撞检测,包括定义位向因子以及具体的碰撞检测算法流程。 #### 关键词 - 碰撞检测 - 三角网面体模型 - 矢量分析 - 虚拟现实 - 仿真技术 #### 引言 在现代计算机图形学、...

    flash 碰撞

    当需要更精确的碰撞效果时,可以使用精确形状碰撞检测,如基于矢量图形的碰撞检测。Flash支持矢量图形,可以通过比较两个对象的矢量路径来判断它们是否相交。这种方法可以处理复杂的形状,但计算量相对较大。 4. *...

    OSG中碰撞检测程序

    在碰撞检测方面,该代码中使用了osg::CoordinateFrame和osg::Matrix来实现摄像机的旋转和移动,并使用osg::Vec3d来表示摄像机的方向矢量。这些类都是OSG中的基本组件, 广泛应用于碰撞检测和三维图形处理中。 OSG中...

    碰撞_vceasyx_物理碰撞_

    在本文中,我们将深入探讨如何使用Visual C++(Vc++)结合Easy X库来...这涉及到了Easy X的图形渲染,以及2D物理碰撞检测的基本原理和算法。通过实践,开发者不仅可以提升C++编程技巧,还能加深对2D物理引擎的理解。

    基于GPU Raycasting算法的矢量_栅格混合绘制研究.pdf

    Raycasting算法的基本思想是从观察者的视角出发,向场景中的每个像素发射虚拟光线,然后追踪这些光线在场景中的交互情况,如碰撞、折射或反射等,最终根据这些信息决定像素的颜色。在传统CPU上,这个过程可能会非常...

    opengl 碰撞检测

    4. **碰撞算法**:一旦有了边界表示,就可以使用各种碰撞检测算法。对于简单的形状,如球体对球体,可以直接比较它们的中心距离和半径。对于AABB,如果它们在任何轴上都没有重叠,那么它们就没有相交。更复杂的形状...

    人物移动和碰撞检测

    本资源包含了人物移动算法和碰撞检测技术的相关资料,帮助开发者深入理解并实现这些功能。 首先,我们要讨论的是**人物移动**。在2D或3D游戏中,人物的移动通常是通过坐标系统来实现的。开发者需要编写代码来处理...

    C#版 RVO算法

    RVO,全称为Relative Velocity Obstacle(相对速度障碍物)算法,是一种在多智能体系统中实现碰撞避免的有效方法。尤其在实时战略(RTS)游戏或多人在线战斗竞技场(Moba)游戏中,确保多个单位能够有效地移动并避免...

    OGRE射线碰撞检测精确到三角面

    ### OGRE射线碰撞检测精确到三角面 #### 概述 ...通过理解射线和平面方程的基本概念以及具体的算法实现,开发者可以更好地理解和实现复杂的3D碰撞检测逻辑,为创建更真实、更交互的游戏环境提供技术支持。

    pengzhuangjiance.rar_OpenGL碰撞_OpenGL碰撞检测_opengl 碰撞检测_碰撞检测_碰撞检测 o

    OpenGL是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API),它不直接提供碰撞检测功能,但我们可以利用其强大的图形绘制能力来辅助实现这一功能。 碰撞检测的基本思想是检测两个或多个物体在...

    java小球碰撞检测

    5. **矢量运算**:小球的速度和方向通常用向量表示,碰撞后的运动状态需要考虑动量守恒和能量守恒,这涉及到矢量的加减运算。 6. **事件处理**:为了检测碰撞,我们需要定期更新小球的位置,并在每次更新后检查碰撞...

    机器人局部路径规划算法——VFH系列论文

    VFH,全称为Vector Field Histogram(矢量场直方图),是一种广泛使用的避障算法,尤其适用于具有传感器数据的移动机器人。这篇关于“机器人局部路径规划算法——VFH系列论文”的资料集合,包含了VFH算法的不同变体...

    opengl.rar_OpenGL弹性_OpenGL碰撞_openGL小球碰撞_opengl 小球碰撞_碰撞

    一旦检测到碰撞,就需要应用弹性碰撞的算法来调整小球的速度和位置,确保碰撞后的运动符合物理规律。 4. **颜色变化**: 在描述中提到,小球碰撞后会变色。这是通过在碰撞检测之后改变小球的颜色属性来实现的,...

    图形学最常用的几个算法

    ### 图形学最常用的几个算法 #### 一、引言 随着计算机技术的发展,许多复杂的任务变得简单化,但同时也存在一些看似简单实则复杂的挑战,例如如何有效地处理几何问题。计算几何作为计算机科学的一个重要分支,...

    分布式输送系统节点路由控制算法设计.pdf

    在最优路径算法方面,学者们提出了基于距离矢量的多下一跳路由信息协议,以分散最优路径上的流量,降低网络拥塞风险。改进的RIP协议克服了原协议中信息更新缓慢的缺点。而在防碰撞机制方面,通过在网络中的节点和弧...

    关于捕鱼达人中的碰撞分层与炮弹反弹后始终面向前进的方向

    这需要一个精心设计的反弹算法。 炮弹反弹的实现通常涉及到矢量运算。当炮弹与目标发生碰撞时,计算出碰撞点、入射角和反射角。入射角是炮弹原始运动方向与法线之间的角度,反射角则是炮弹反弹后的方向与同一法线...

Global site tag (gtag.js) - Google Analytics