使用中点公式找出一条线上的所有点

时间:2014-01-14 11:51:05

标签: c# algorithm latitude-longitude points

我在地图上绘制了一条路线(线)。对于这条路线,我有2个点,起点和终点说(x1,y1)和(x2,y2)。

我需要找出线上的所有点。我正在使用中点公式。 以下是相同的代码。

private void GetAllPoints(GraphLocation start, GraphLocation end)
{
    GraphLocation midPoint = GetMidPoint(start, end);
    allPoints.Add(midPoint);
    while (start.Latitude != midPoint.Latitude && start.Longitude != midPoint.Longitude)
    {
        GraphLocation point = GetMidPoint(start, midPoint);
        midPoint = point;
        allPoints.Add(point);
    }          
}

private GraphLocation GetMidPoint(GraphLocation start, GraphLocation end)
{
    GraphLocation midPoint = new GraphLocation();

    double dLon = DegreesToRadians(end.Longitude - start.Longitude);
    double Bx = Math.Cos(DegreesToRadians(end.Latitude)) * Math.Cos(dLon);
    double By = Math.Cos(DegreesToRadians(end.Latitude)) * Math.Sin(dLon);

    midPoint.Latitude = RadiansToDegrees(Math.Atan2(
                         Math.Sin(DegreesToRadians(start.Latitude)) + Math.Sin(DegreesToRadians(end.Latitude)),
                         Math.Sqrt(
                             (Math.Cos(DegreesToRadians(start.Latitude)) + Bx) *
                             (Math.Cos(DegreesToRadians(start.Latitude)) + Bx) + By * By)));

   midPoint.Longitude = start.Longitude + RadiansToDegrees(Math.Atan2(By, Math.Cos(DegreesToRadians(start.Latitude)) + Bx));
   allPoints.Add(midPoint);

   return midPoint;
}

此代码会跳过路径的某些部分。

请帮助我获得理想的结果。

1 个答案:

答案 0 :(得分:0)

似乎你只在行的前半部分计算中点,然后每次将其平分,因为你只是在开始和中间之间进行计算。 GraphLocation point = GetMidPoint(start, midPoint); 如何递归调用GetMidPoint()?停止条件是限制递归的深度,所以你不会得到很多点。