# Unity3D Tip: Polar and Cartesian Coordinates in C#

While working on a game experiment called Alien Shootout with Unity3D, I wanted to have the main character rotate around the planet (like Super Mario Galaxy).

Here is how I did this:

```
function CartesianToPolar(point:Vector3):Vector2
{
var polar:Vector2;
//calc longitude
polar.y = Mathf.Atan2(point.x,point.z);
//this is easier to write and read than sqrt(pow(x,2), pow(y,2))!
var xzLen = Vector2(point.x,point.z).magnitude;
//atan2 does the magic
polar.x = Mathf.Atan2(-point.y,xzLen);
//convert to deg
polar *= Mathf.Rad2Deg;
return polar;
}
function PolarToCartesian(polar:Vector2):Vector3
{
//an origin vector, representing lat,lon of 0,0.
var origin=Vector3(0,0,1);
//build a quaternion using euler angles for lat,lon
var rotation = Quaternion.Euler(polar.x,polar.y,0);
//transform our reference vector by the rotation. Easy-peasy!
var point:Vector3=rotation*origin;
return point;
}
```

I have two functions to convert polar coordinates to cartesian ones and viceversa.

I also create a script called *CustomGravity* with the following public properties: latitude, longitude and height.

The *CustomGravity* script continuosly assigns the newly calculated polar position to the transform keeping in mind the values of the properties. I then add the *CustomGravity* script to every object that need to have a Super Mario Galaxy style.

I hope this is useful. Ask if you have questions