行矢量碰撞算法

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;
			}
		}
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值