Interpolasi

 avatar
unknown
java
4 years ago
3.2 kB
8
Indexable
public double[] dataInterpolasi(List<DataCSV> listJarak, List<DataCSV> listPercepatan){
        float jarakMax = pref.getFloat("runDistance", 0f);
        double t = 0.0;
        double[] result = new double[5];
        int i = 0;
        double d1=0.0, d2, t1 = 0.0,t2;
        for(i = 0; i <listJarak.size(); i++){
            d2 = Math.abs(listJarak.get(i).getZ());
            t2 = listJarak.get(i).getTimestamp();
            if (i >0){
                d1 = Math.abs(listJarak.get(i-1).getZ());
                t1 = listJarak.get(i-1).getTimestamp();
            }
            if ( d2 > jarakMax){
                if (i==0){
                    t = 0+((jarakMax-0)/(d2-0))*(t2-0);//(listdata.get(i).getTimestamp()-0))*set_point;
                }else {
                    t = t1+ (jarakMax-d1)/(d2- d1)* (t2-t1);
                }
                break;
            }else if (d2 == jarakMax){
                t = t2;
                break;
            }else if (d2 < jarakMax && i == listJarak.size()-1){
                t = t2 + (jarakMax-d1)/(d2- d1)* (t2-t1);
                break;
            }
        }
        //mencari percepatannya pada data setpoint
        double setPointWaktu = t, a = 0.0;
        if (listPercepatan.get(i).getTimestamp() > setPointWaktu){
            if (i==0){
                a = 0+((setPointWaktu-0)/(listPercepatan.get(i).getTimestamp()-0))*
                        (listPercepatan.get(i).getZ()-0);
            }else {
                a = listPercepatan.get(i-1).getZ()+
                        (setPointWaktu-listPercepatan.get(i-1).getTimestamp())/(listPercepatan.get(i).getTimestamp() - listPercepatan.get(i-1).getTimestamp())*
                                (listPercepatan.get(i).getZ()-listPercepatan.get(i-1).getZ());
            }
        }else if (listPercepatan.get(i).getZ() == setPointWaktu){
            a = listPercepatan.get(i).getZ();
        }else if (listPercepatan.get(i).getZ() < setPointWaktu && i== listPercepatan.size()-1){
            a = listPercepatan.get(i).getZ()+
                    (setPointWaktu-listPercepatan.get(i-1).getTimestamp())/(listPercepatan.get(i).getTimestamp() - listPercepatan.get(i-1).getTimestamp())*
                            (listPercepatan.get(i).getZ()-listPercepatan.get(i-1).getZ());
        }
//        Log.i("interpolasi", i +" "+t+" "+listPercepatan.get(i).getTimestamp()+" "+a+" "+dataAsli.size());
        result[0] = jarakMax;//jarak
        result[1] = t;//waktu pada jarak
        result[2] = a;//percepatan pada waktu dan jarak
        result[3] = a*t;//kecepatan
        result[4] = i;//posisi index
        dataAsli.get(i).setTimestamp(t);
        dataAsli.get(i).setZ(a);
        this.listjarak.get(i).setTimestamp(t);
        this.listjarak.get(i).setZ(Double.valueOf(jarakMax));
        listkecepatan.get(i).setTimestamp(t);
        listkecepatan.get(i).setZ(result[3]);
        for (int c = i+1; c < dataAsli.size();){
            dataAsli.remove(c);
            listjarak.remove(c);
            listkecepatan.remove(c);
        }
        Log.i("interpolasi", i +" "+t+" "+listPercepatan.get(i).getTimestamp()+" "+a+" "+dataAsli.size());
        return result;
    }
Editor is loading...