# Unity3D Tip: Polar and Cartesian Coordinates in C#

Published Aug 04, 2015Last updated Feb 13, 2017

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

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