# rotatem

Transform vector map data to new origin and orientation

## Syntax

```[lat1,lon1] = rotatem(lat,lon,origin,'forward') [lat1,lon1] = rotatem(lat,lon,origin,'inverse') [lat1,lon1] = rotatem(lat,lon,origin,'forward',units) [lat1,lon1] = rotatem(lat,lon,origin,'forward',units) ```

## Description

`[lat1,lon1] = rotatem(lat,lon,origin,'forward')` transforms latitude and longitude data (`lat` and `lon`) to their new coordinates (`lat1` and `lon1`) in a coordinate system resulting from Euler angle rotations as specified by `origin`. The input `origin` is a three- (or two-) element vector having the form ```[latitude longitude orientation]```. The latitude and longitude are the coordinates of the point in the original system, which is the center of the output system. The orientation is the azimuth from the new origin point to the original North Pole in the new system. If `origin` has only two elements, the orientation is assumed to be 0º. This `origin` vector might be the output of `putpole` or `newpole`.

`[lat1,lon1] = rotatem(lat,lon,origin,'inverse')` transforms latitude and longitude data (`lat` and `lon`) in a coordinate system that has been transformed by Euler angle rotations specified by `origin` to their coordinates (`lat1` and `lon1`) in the coordinate system from which they were originally transformed. In a sense, this undoes the `'forward'` process. Be warned, however, that if data is rotated forward and then inverted, the final data might not be identical to the original. This is because of roundoff and data collapse at the original and intermediate singularities (the poles).

`[lat1,lon1] = rotatem(lat,lon,origin,'forward',units)` and ```[lat1,lon1] = rotatem(lat,lon,origin,'forward',units)``` specify the angle units of the data, where `units` is any recognized angle unit. The default is `'radians'`. Note that this default is different from that of most functions.

The `rotatem` function transforms vector map data to a new coordinate system.

An analytical use of the new data can be realized in conjunction with the `newpole` function. If a selected point is made the north pole of the new system, then when new vector data is created with `rotatem`, the distance of every data point from this new north pole is its new colatitude (90º minus latitude). The absolute difference in the great circle azimuths between every pair of points from their new pole is the same as the difference in their new longitudes.

## Examples

What are the coordinates of Rio de Janeiro (23ºS,43ºW) in a coordinate system in which New York (41ºN,74ºW) is made the North Pole? Use the `newpole` function to get the origin vector associated with putting New York at the pole:

```nylat = 41; nylon = -74; riolat = -23; riolon = -43; origin = newpole(nylat,nylon); [riolat1,riolon1] = rotatem(riolat,riolon,origin,... 'forward','degrees') riolat1 = 19.8247 riolon1 = -149.7375 ```

What does this mean? For one thing, the colatitude of Rio in this new system is its distance from New York. Compare the distance between the original points and the new colatitude:

```dist = distance(nylat,nylon,riolat,riolon) dist = 70.1753 90-riolat1 ans = 70.1753 ```

## Version History

Introduced before R2006a