谷歌小車軌跡

2021-09-13 01:15:52 字數 3902 閱讀 3525

話不多說直接看**在

public class googlemovemarker 

public void setpoints(listvar1)

stopmove();

points.clear();

iterator var7 = var1.iterator();

while (var7.hasnext())

}eachdistance.clear();

totaldistance = 0.0d;

for (int var8 = 0; var8 < points.size() - 1; ++var8)

remaindistance = totaldistance;

latlng var9 = points.get(0);

if (marker != null) else

marker = mmap.addmarker((new markeroptions()).position(var9).icon(descriptor).title("").anchor(0.5f, 0.5f));

}reset();

} catch (throwable var5) }}

//設定圖示 機動時間長度

public void setduration(int speed)

//重置

public void reset()

status = state.a;

}} catch (interruptedexception var1)

}//設定圖示

private void checkmarkericon()

marker.seticon(descriptor);

usedefaultdescriptor = false;}}

//設定總滑動時間

public void settotalduration(int var1)

/*** 開始移動

*/public void startsmoothmove() else

index = 0;

try catch (throwable var3) }}

}private class c implements runnable

public final void run()

if (status != state.d) }}

status = state.e;

} catch (throwable var5) }}

/*** 設定位置

* @param var1

*/private void getcurposition(long var1)

var3 -= var7;

}if (var9 != index && movelistener != null)

index = var9;

if (movelistener != null) movelistener.move(points.get(var9), points.get(var9 + 1));

}/**

* 根據兩點算取圖示轉的角度

*/public double getrotate(latlng frompoint, latlng topoint) else

}float deltangle = 0;

if ((topoint.latitude - frompoint.latitude) * slope < 0)

double radio = math.atan(slope);

double angle = 180 * (radio / math.pi) + deltangle - 90;

return angle;

}/**

* 算斜率

*/private double getslope(latlng frompoint, latlng topoint)

double slope = ((topoint.latitude - frompoint.latitude) / (topoint.longitude - frompoint.longitude));

return slope;

}/**

* 停止移動

*/public void stopmove()

}public marker getmarker()

public latlng getposition()

public int getindex()

public void resetindex()

/*** 銷毀

*/public void destroy()

if (marker != null)

object var1 = mlock;

synchronized (mlock)

} catch (throwable var4)

}public void removemarker()

points.clear();

eachdistance.clear();

}public void setposition(latlng var1) else

marker = mmap.addmarker((new markeroptions()).position(var1).icon(descriptor).title("").anchor(0.5f, 0.5f));}}

public void setdescriptor(bitmapdescriptor var1)

descriptor = var1;

if (marker != null)

}public void setrotate(float var1)

}public void setvisible(boolean var1)

}private class b implements threadfactory

public final thread newthread(runnable var1)

}public void setmovelistener(movelistener var1)

public inte***ce movelistener

private enum state

}}

下面是建立marker 的移動軌跡所有的 經緯度列表

public void setmarker(listpoints) 

@override

public void move(latlng start, latlng end)

});}

//設定marker 移動間隔時間,越小移動的越快

mmovemarker.setduration(duration);

// 設定平滑移動的總時間 單位 秒

mmovemarker.settotalduration(mlistbeans.size() / 10);

// 設定軌跡點

mmovemarker.setpoints(points);

//停止移動

mmovemarker.stopmove();

//開始移動

mmovemarker.startsmoothmove();

//重置points下標

mmovemarker.resetindex();

//重置marker位置

mmovemarker.reset();

//設定起始移動點

mmovemarker.setposition(mpoints.get(0));

//設定兩點之間marker圖示方向的角度

mmovemarker.setrotate((float) mmovemarker.getrotate(start, end));

軌跡預處理(軌跡壓縮)

在介紹兩類壓縮演算法之前,本文先介紹兩種 距離度量 方法 第一種距離度量方法是 垂直的歐幾里得距離,如圖b所示,p1 p7 p12作為壓縮後的點。垂直度量 則為做垂線計算。第二種距離度量方法是 時間同步的歐幾里得距離,如圖a所示,p1 p7 p12作為壓縮後的點。p1與p2之間是3秒,p2與p3之間...

軌跡預處理(軌跡分段)

在軌跡聚類,分類之前,我們通常要將軌跡分段。第一種軌跡分段方法是利用 時間間隔 分段。具體來說,如果兩個軌跡點之間的時間差較大,則進行分段 另外一種則是按照時間段將軌跡分段。第二種方法是基於軌跡的形狀。具體來說,基於軌跡點方向的角度變化大小分段,如果變化超過一定的閾值,則分段 另外一種方法 線簡化 ...

智慧型循跡小車 循跡小車電子製作

第一步根據元器件清單清點器件,看是否缺件少件。下圖是元器件全家福 第二步依次焊接元器件 要先焊接小的元器件,再焊接大的元器件,最後粘上電池座和馬達。焊接好所有元器件後再次肉眼檢查有沒有焊反,虛焊漏焊的點。確認無誤後,進行第三步。第三步裝上電池除錯。電馬達的2根線可能會裝反,光敏電阻和發光二極體的相對...