根据距离和方位计算 point/coordinate
Calculate point/coordinate from distance and bearing
数学不是我的强项,我想我在这里有一些混淆,但我不知道是什么。
我只是想在给定一些变量和常量的情况下填充 2 个新坐标。
如果我将原点坐标设置为 5,5,将目标坐标设置为 10,5,我可以使用以下两个函数计算出该距离 = 5,并且从原点到目的地的方位角为 90:
private static double GetDistance(PointF point1, PointF point2)
{
double a = (double)(point2.X - point1.X);
double b = (double)(point2.Y - point1.Y);
return Math.Sqrt(a * a + b * b);
}
public static double GetBearing(PointF coord1, PointF coord2)
{
double result = 0.0;
result = Math.Atan2(coord2.X - coord1.X, coord2.Y - coord1.Y) * (180 / Math.PI); //- Math.Atan2(coord4.y - coord3.y, coord4.x - coord3.x))
if (result < 0)
{
result = result + 360;
}
return result;
}
给定 xd=1 的偏移距离和 180 的偏移方位角(即与目的地直接相反的方向),我希望能够做的是绘制位置 4,5。我还希望能够在 90 和地块 5,6 中提供不同的偏移轴承。
这是我尝试过的方法,但我得到的值完全没有意义。
public static PointF CalculateCoordinate(double Angle, double Distance)
{
PointF coord = new PointF(Convert.ToSingle(Distance * Math.Cos(Angle)), Convert.ToSingle(Distance * Math.Sin(Angle)));
return coord;
}
和 CalculateCoordinate(GetBearing(Destination, Origin),1)
直接将轴承反转 180。我试过这个 CalculateCoordinate(90,1)
来计算向侧面的偏移量,但这也不起作用。
我哪里错了,我敢肯定这是非常愚蠢和简单的事情。
我看到了两个错误。首先,Atan2第一个参数取Y值,第二个参数取X值:
Math.Atan2(coord2.Y - coord1.Y, coord2.X - coord1.X) * (180 / Math.PI);
其次,您在 GetBearing
中将弧度转换为度数,但在 CalculateCoordinate
中您没有将角度从度数转换为弧度,例如:
Math.Cos(Angle * (Math.PI / 180))
数学不是我的强项,我想我在这里有一些混淆,但我不知道是什么。
我只是想在给定一些变量和常量的情况下填充 2 个新坐标。
如果我将原点坐标设置为 5,5,将目标坐标设置为 10,5,我可以使用以下两个函数计算出该距离 = 5,并且从原点到目的地的方位角为 90:
private static double GetDistance(PointF point1, PointF point2)
{
double a = (double)(point2.X - point1.X);
double b = (double)(point2.Y - point1.Y);
return Math.Sqrt(a * a + b * b);
}
public static double GetBearing(PointF coord1, PointF coord2)
{
double result = 0.0;
result = Math.Atan2(coord2.X - coord1.X, coord2.Y - coord1.Y) * (180 / Math.PI); //- Math.Atan2(coord4.y - coord3.y, coord4.x - coord3.x))
if (result < 0)
{
result = result + 360;
}
return result;
}
给定 xd=1 的偏移距离和 180 的偏移方位角(即与目的地直接相反的方向),我希望能够做的是绘制位置 4,5。我还希望能够在 90 和地块 5,6 中提供不同的偏移轴承。
这是我尝试过的方法,但我得到的值完全没有意义。
public static PointF CalculateCoordinate(double Angle, double Distance)
{
PointF coord = new PointF(Convert.ToSingle(Distance * Math.Cos(Angle)), Convert.ToSingle(Distance * Math.Sin(Angle)));
return coord;
}
和 CalculateCoordinate(GetBearing(Destination, Origin),1)
直接将轴承反转 180。我试过这个 CalculateCoordinate(90,1)
来计算向侧面的偏移量,但这也不起作用。
我哪里错了,我敢肯定这是非常愚蠢和简单的事情。
我看到了两个错误。首先,Atan2第一个参数取Y值,第二个参数取X值:
Math.Atan2(coord2.Y - coord1.Y, coord2.X - coord1.X) * (180 / Math.PI);
其次,您在 GetBearing
中将弧度转换为度数,但在 CalculateCoordinate
中您没有将角度从度数转换为弧度,例如:
Math.Cos(Angle * (Math.PI / 180))