0

我已经被这个问题困扰了很长一段时间了。

我正在 iOS 中构建一个自定义导航应用程序,我有一个 CLLocations 数组,所以在数组 0 中我得到最后两个坐标,得到它们的方位,然后在数组 1 中我得到前两个坐标的方位 -纵坐标。

然后,我想计算相对于当前路径(在本例中为路径 0)的转弯角度,这样我就可以确定用户转向的方向。

我已经尝试了很多在这里找到的方法,但都没有成功。有没有人有任何提示或建议

我正在尝试做的图表。

任何帮助将不胜感激,谢谢!

更新:在阅读了评论后,我再次返回并再次查看,因为我确定我做对了,结果我的积分存储错误并且我使用的方法是正确的!

对我最有效的是获得两条路径的方位,从前一条路径中获取当前路径的方位,并遵循此指南。

if(self.turnAngle <= 165){
    self.turnString = LEFT;
}else if( self.turnAngle >= 165 && self.turnAngle <= 205 ){
    self.turnString = STRAIGHT;
}else if( self.turnAngle >= 205 ){
    self.turnString = RIGHT;
}
4

2 回答 2

0

更新:在阅读了评论后,我再次返回并再次查看,因为我确定我做对了,结果我的积分存储错误并且我使用的方法是正确的!

对我最有效的是获得两条路径的方位,从前一条路径中获取当前路径的方位,并遵循此指南。

 float previousPathBearing = //get bearing
 float currentPathBearing = //get bearing
 float angle = previousPathBearing - currentPathBearing;
 angle = angle<0?-angle:angle;


if(angle<= 165){
    //LEFT;
}else if( angle>= 165 && angle <= 205 ){
    //STRAIGHT;
}else if( angle >= 205 ){
    //RIGHT;
}

你必须原谅拼写错误/愚蠢的错误,因为我很累,但这对我来说很好!

于 2013-02-03T18:04:39.283 回答
0

如果我理解正确,您在路径 1 上有 2 个点(称为 p1_x1、p1_y1 和 p1_x2、p1_y2),在路径 2 上有 2 个点(称为 p2_x1、p2_y1 和 p2_x2、p2_y2),并且您想找到路径之间的角度?

这并不难做到。使用该atan2函数求路径 1 和路径 2 的绝对角度,然后从另一个角度减去一个角度。

换句话说,您的代码将执行如下操作:

float anglePath1Radians = atan2(p1_y2 - p1_y1 / p1_x2 - p1_x1);
float anglePath2Radians = atan2(p2_y2 - p2_y1 / p2_x2 - p2_x1);

float angleDifferenceRadians = anglePath1Radians - anglePath2Radians;

请记住,此结果可能以弧度为单位,因此您需要转换为度数。

替代方法

您可以使用点积(AKA 标量)通过取反余弦来找到角度:

float path1Dx = p1_x2 - p1_x1;
float path1Dy = p1_y2 - p1_y1;

float path2Dx = p2_x2 - p2_x1;
float path2Dy = p2_y2 - p2_y1;

float path1Magnitude = sqrt(path1Dx * path1Dx + path1Dy * path1Dy);
float path2Magnitude = sqrt(path2Dx * path2Dx + path2Dy * path2Dy);

float dotProduct = path1Dx * path2Dx + path1Dy * path2Dy;

float angleDifferenceRadians = acos(dotProduct / (path1Magnitude * path2Magnitude));
于 2013-02-03T14:05:01.570 回答