数学不是我的强项,我觉得我在这里有些不和,但我无法弄清楚是什么。
我只是尝试在给定一些变量和常量的情况下填充2个新坐标。
如果我使Origin坐标5,5和Destination坐标10,5,我可以计算出距离= 5,并且使用这两个函数从Origin到Destination的方位是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)
来计算一边的偏移,但这也不起作用。
我哪里出错了,我确定这是一件非常愚蠢和简单的事情。
答案 0 :(得分:0)
我可以看到两个错误。首先,Atan2取第一个参数的Y值和第二个参数的X值:
Math.Atan2(coord2.Y - coord1.Y, coord2.X - coord1.X) * (180 / Math.PI);
其次,你在GetBearing
中从弧度转换为度数,但是你没有将角度从度数转换为CalculateCoordinate
内的弧度,例如:
Math.Cos(Angle * (Math.PI / 180))