2010-03-03 145 views
0

我需要将直角坐标转换为极坐标。你能推荐一个我可以使用的图书馆,我宁愿不必自己写这个图书馆。将直角坐标转换为极坐标的Java包

这是用于理解包含在天文图像文件中的元数据。

+4

嗯...计算应该很简单,如果你查阅公式并自己实现它,它可能真的帮助你理解问题域。 – 2010-03-03 07:16:14

+0

确实如此,但问题并不重要,所以不能帮助我学习新东西。但是如果有一些已经被使用过的东西,我会知道这个水管是正确的,并且可能会有一些“很好”的方法来做其他事情......如果不是,我当然会自己写。 – Ankur 2010-03-03 07:46:06

回答

1

我很确定标准库已经有这个。如果存在虚数类型,它们恰好是这样的(real = x,imag = y,arg(val)= angle,abs(val)= radius)。使用数学库(atan2,sin,cos和sqrt)也不是那么困难。

1

是不是就像2功能?当然你可以用任何语言搜索它并自己转换它。

这里是我的代码做矩形 - >极(另一种方式是很容易的)在C++中

Vector3 C2P (const Vector3 &v) 
{ 
     float PI=3.14159260f; 
     Vector3 polar; 
     polar.x = v.Length(); 

     if (v.z > 0.0f) { 
       polar.y = (float) atan (v.z/sqrt (v.x * v.x + v.y * v.y)); 
     } 
     else if (v.z < 0.0f) { 
       polar.y = (float) -atan (sqrt (v.x * v.x + v.y * v.y)/v.z); 
     } 
     else { 

       polar.y = 0.0; 
     } 


     if (v.x > 0.0f) { 
       polar.z = (float) atan (v.y/v.x); 
     } 
     else if (v.x < 0.0f) { 
       polar.z = (float) atan (v.y/v.x) + PI; 
     } 
     else if (v.y > 0) { 
       polar.z = PI * 0.5f; 
     } 
    else { 
       polar.z = -PI * 0.5f; 
     } 
     //polar.z=(polar.z/M_PI)*180; 
     //polar.y=(polar.y/M_PI)*180; 
     return polar; 
} 

记下该结果为x =长度,Y =角度1 Z = angle2,弧度。

编辑: 由我的代码,我的意思是一些代码,我从某处偷了,像一次使用。

+3

糟糕的实现。你应该使用atan2而不是atan来避免if-elses。 – Tronic 2010-03-03 07:25:26

1

你要求的是一个Map Projection库。最流行的开源库之一是PROJ.4,它有一个Java Implementation

您必须决定要使用的投影。他们有不同的属性。 Mercator很常见,并且是Google地图正在使用的一种。墨卡托的缺点是你不能在弧形杆上使用它。