所以写了一个向量算法:
public double Angle(Model.LatLng cen, Model.LatLng first, Model.LatLng second)
{
double dx1, dx2, dy1, dy2;
double angle;
dx1 = first.Lat - cen.Lat;
dy1 = first.Lng - cen.Lng;
dx2 = second.Lat - cen.Lat;
dy2 = second.Lng - cen.Lng;
double c = (double)Math.Sqrt(dx1 * dx1 + dy1 * dy1) * (double)Math.Sqrt(dx2 * dx2 + dy2 * dy2);
if (c == 0) return -1;
angle = ((double)Math.Acos((dx1 * dx2 + dy1 * dy2) / c) * 180) / Math.PI;
return angle;
}
#region 取点比较
int Pcount = list.Count - 1;
for (int i = 0; i < Pcount; i++)
{
Model.LatLng P0 = new Model.LatLng();
Model.LatLng P1 = new Model.LatLng();
Model.LatLng P2 = new Model.LatLng();
Model.LatLng Pdy = new Model.LatLng();
Pdy.Lat = model_dynamic.Lat;
Pdy.Lng = model_dynamic.Lng;
//
int j = i + 1;
if (Pcount <= j)
{
P0 = list[i];
P1 = list[i + 1];
P2 = list[0];
}
else
{
P0 = list[i];
P1 = list[i + 1];
P2 = list[i + 2];
}
double geo_angle = Angle(P1, P0, P2);
double dynamic_angle = Angle(P1, P0, Pdy);
if (geo_angle >= dynamic_angle)
{
inout = 0;
}
else
{
inout = 1;
}
if (inout == 1)
{
break;
}
}
#endregion
以上是核心代码。
如果有什么不明白的也可以邮件给我!
以上是核心代码。
如果有什么不明白的也可以邮件给我!