【发布时间】:2021-09-15 04:41:41
【问题描述】:
嘿,我正在尝试在 latlng 系统内围绕它自己的中心旋转一条线。
我得到了角度和两个点。所以我尝试附加旋转矩阵,像这样(以下方法采用点的纬度和经度以及角度):
LatLng rotate(double lat, double long, double angle){
double rad = angle*pi/180;
double newLong = long*cos(rad)-lat*sin(rad);
double newLat = long* sin(rad) + lat*cos(rad);
return LatLng(newLat,newLong);
}
例如,我得到了点 A(纬度:x,经度:y)和点 B(纬度:x,经度:y)。连接这两个点导致一条线。现在我想要两个用上面的方法围绕它自己的中心旋转线,通过调用:
LatLng newA = rotate(A.latitude,A.longitude);
LatLng newB = rotate(B.latitude,B.longitude);
但是当我连接两个点 newA 和 NewB 时,并没有想要的效果。
正如@Abion47 在他的回答中澄清的那样,我需要在 3 维中旋转,但如何做到这一点?如果它是一条非常小的线,是否可以使用二维?
【问题讨论】:
-
好吧,很难知道这段代码在做什么。我们所看到的只是一个可能的圆在某个角度的 x 和 y 坐标。如果您要旋转某些东西,则需要转换这些线的坐标偏移量。您发布的这段代码实际上没有任何意义
-
您将度数转换为弧度,然后使用度数进行以下计算。在三角函数中将
angle更改为rad。 -
此外,纬度和经度表示三个维度的坐标,这意味着任何任意旋转都需要至少两个旋转标量,除非您所做的只是简单地在一个轴上旋转球体。如果您描述了您实际尝试通过轮换实现的目标,将会有所帮助。
-
对不起,我试图指定我的问题
-
最后,纬度和经度本身已经代表角度,因此对它们中的任何一个执行简单的旋转意味着只需将新角度添加到现有的纬度/经度值。
标签: flutter dart coordinates latitude-longitude coordinate-transformation