2010-03-03 181 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地圖正在使用的一種。墨卡託的缺點是你不能在弧形杆上使用它。