我在地图上绘制了一条路线(线)。对于这条路线,我有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;
}
此代码会跳过路径的某些部分。
请帮助我获得理想的结果。
答案 0 :(得分:0)
似乎你只在行的前半部分计算中点,然后每次将其平分,因为你只是在开始和中间之间进行计算。 GraphLocation point = GetMidPoint(start, midPoint);
如何递归调用GetMidPoint()?停止条件是限制递归的深度,所以你不会得到很多点。