`

矩阵碰撞算法

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

import java.util.Arrays;

public class MatrixHit {

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

		//rc(a1,a2,a1.length-1);
		matrixRc(a1,a2);
		System.out.println(Arrays.toString(a1));
		System.out.println(Arrays.toString(a2));
	}
	/**
	 * 方正碰撞算法(等行等列)适用于元素全为正整数
	 * @param a
	 * @param b
	 */
	public static void matrixRc(double[] a,double [] b){
		int numRows=(int) Math.sqrt(a.length);
		int numColumns=numRows;
		double [][] aM=new double[numRows][numColumns];
		double [][] bM=new double[numRows][numColumns];
		
		for(int i=0;i<numRows;i++){
			double [] aR=getRowVector(a,i);
			double [] bR=getRowVector(b,i);
			rc(aR,bR);
			aM[i]=aR;
			bM[i]=bR;
		}
		
		for(int i=0;i<numRows;i++){
			for(int j=0;j<numColumns;j++){
				a[j+i*numColumns]=aM[i][j];
				b[j+i*numColumns]=bM[i][j];
			}
		}
	}
	/**
	 * 按行列坐标得元素值算法
	 * @param elements
	 * @param nRow
	 * @param nCol
	 * @return
	 */
	public static double getElement(double[] elements,int nRow,int nCol){
		int numColumns=(int) Math.sqrt(elements.length);
		return elements[nCol+nRow*numColumns];
	}
	/**
	 * 得行向量算法
	 * @param elements
	 * @param nRow
	 * @return
	 */
	public static double[] getRowVector(double[] elements,int nRow){
		int numColumns=(int) Math.sqrt(elements.length);
		double[] pVector=new double[numColumns];
		for(int j=0;j<numColumns;++j){
			pVector[j]=getElement(elements,nRow,j);
		}
		return pVector;
	}
	/**
	 * 单行向量碰撞算法(递归算法)
	 */
	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;
			}
		}
	}
}

 

2
0
分享到:
评论

相关推荐

    《实时碰撞检测算法技术》

    第1章 概述1.1 内容概览1.2 关于本书的代码第2章 碰撞检测系统中的设计问题2.1 碰撞算法的设计因素2.2 应用程序中对象的表达方式2.3 查询类型2.4 环境模拟参数2.5 性能2.6 健壮性2.7 实现与使用的简洁性2.8 小结第3...

    论文研究-二进制一维矩阵搜索防碰撞算法.pdf

    该算法根据检测到的标签碰撞位信息构造二进制搜索矩阵,并确定相应的碰撞位对应值矩阵对标签进行搜索,通过对搜索前缀进行改进,使得读写器与标签之间传输量减少,且在标签识别过程中,碰撞位矩阵及其对应值矩阵需...

    基于矩阵易位的可逆加密算法分析与设计 (2011年)

    针对对称加密算法和非对称加密算法,其加密效率低下、不具有在商业通信背景下的普遍适用性,文中基于矩阵易位变换原理提出了一个加密强度很高、发生碰撞概率极孝且加密效率较高的对称加密算法。本加密算法适用于对安全...

    论文研究-隧道人员定位系统中RFID防碰撞算法的研究.pdf

    为防止隧道人员定位系统中多个射频标签同时向阅读器发送识别信息时产生的碰撞问题,在二进制搜索算法的基础上进行改进。改进算法采取后退策略,减少了碰撞发生次数;去除寻呼过程中的信息冗余位,缩短了数据传输的...

    论文研究-一种新的RFID混合防碰撞算法.pdf

    根据碰撞时隙数直接估计出总的未识读标签数目,经多次动态调整帧长,获得最优帧长,然后使读写器按照最优帧长分配时隙以供标签响应,在碰撞时隙内调用自适应搜索矩阵(ASM)算法对响应标签进行识别。理论研究和仿真...

    论文研究 - 多机器人任务分配与路径规划模型与算法研究

    在对机器人工作环境进行建模的基础上,采用弗洛伊德算法求解点之间的最短距离矩阵。 为了使机器人的固定成本和机器人操作成本之和最小,建立了整数规划模型,并设计了求解该模型的遗传算法。 为了使各个机器人协调...

    Matlab数组矩阵在实际中的运用,对开发小游戏的作用.pdf

    通过使用矩阵计算,我们可以轻松地实现游戏中各种物体的运动、旋转、碰撞等效果,从而增强游戏的真实感和可玩性。 其次,Matlab的数组功能可以帮助我们更加高效地处理和管理游戏数据。例如,我们可以使用数组来存储...

    数据结构与算法.xmind

    外循环while只要i和j不碰撞查找 内层两个while循环分别查找出比支点小的和比支点大的角标 如果i满足条件,就交换 一趟排序后,支点的左边都比支点小,支点右边都比支点大 只要...

    C语言经典算法100例.rar

    C语言的经典算法。 第一篇 基础与提高  实例1利用库函数编写基本显示程序  实例2变量属性  实例3运算符与类型  实例4关于程序结构  实例5显示函数曲线图  实例6二分法选代的应用  实例7多变的立方体  实例8...

    基于Prim算法实现的最小生成树

    最小生成树 (MST),已被广泛用于广泛的科学领域与日常生活中,例如 粒子物理学(区分对撞机碰撞中的事件类别)、天文学(探测星团中的质量分离)、导航路线计算,近几年也不断有新的最小生成树算法被提出,在新的...

    研究论文-一种基于邻域感知的群集控制算法.pdf

    运用LaSalle不变集原理和代数图论相关知识对控制算法进行了稳定性分析,并得出如下主要结论:1)智能体速度大小和方向渐近收敛,最终趋于一致;2)智能体之间的距离渐近趋于期望距离,并最终保持相对稳定;3)有互连...

    汽车二维碰撞模型的简便算法 (2011年)

    为了对基于动量定理建立的汽车二维碰撞模型进行快速求解,利用矩阵分块处理原理建立了一种简便算法.通过矩阵分块处理可以降低所求模型的矩阵阶数,从而简化了求解过程.对典型汽车碰撞实例的分析表明:应用该方法能够...

    论文研究-基于并行和变参数的混沌hash函数的构造与性能分析.pdf

    提出了一种基于可并行和变参数的混沌分段线性映射hash函数算法。该函数通过明文扩展将并行处理的明文消息...计算机模拟表明,本算法具有较好的单向性、混乱、扩散性以及抗碰撞性,满足单向hash 函数的各项性能要求。

    论文研究-混合气体有效弛豫频率算法的弛豫理论统一 .pdf

    混合气体有效弛豫频率算法的弛豫理论统一,朱明,王殊,研究了有效弛豫频率的两种算法,弛豫矩阵算法和最大弛豫声衰减系数算法。在气体分子碰撞能量转移概率的计算中忽略近似共振振动模

    数据结构经典代码(严蔚敏).

    /* 用邻接矩阵表示的图的深度优先周游的非递归算法*/ /* 用邻接表表示的图的深度优先周游的非递归算法*/ /* 用邻接矩阵表示的图的Kruskal算法的源程序*/ /* 用邻接矩阵表示的图的prim算法的源程序*/ /* 用邻接矩阵...

    图形学实验三《二维图形几何变换算法》代码+报告

    (3)了解定时器的使用方法和边界碰撞检测方法 (4)了解静态切分视图框架设计方法 实验概括  对于一个二维图形作平移、旋转、放缩变换,可以转换为在二维坐标系中图形的所有点分别可以对应到在x,y轴方向分别平移...

    数据结构总结(自学、期末复习或考研备用).pdf

    内容涵盖:第一章绪论、算法衡量指标、第二章线性表、顺序表、链表、第三章栈和队、栈、栈的应用举例、队列、循环队列、第四章串、串的模式匹配、第五章数组和广义表、稀疏矩阵的压缩存储方法:、广义表、第六章树和...

    TauSpinner算法的文档:用于模拟LHC的$$ \ uptau $$τ-轻子产生中的自旋效应的程序

    pp碰撞中产生的\ uptau $$τ-轻子可以测量标准模型参数,并提供新物理的探针。 TauSpinner程序可用于修改任何$$ \ upt $$ $$样本中的自旋(或生产矩阵元素)效果。 它依赖于输出粒子的运动学:$$ \ uptau $$τ轻子...

Global site tag (gtag.js) - Google Analytics