diff options
Diffstat (limited to 'generic')
-rw-r--r-- | generic/Geo.c | 21 | ||||
-rw-r--r-- | generic/Geo.h | 7 |
2 files changed, 28 insertions, 0 deletions
diff --git a/generic/Geo.c b/generic/Geo.c index 1fde494..cb070e5 100644 --- a/generic/Geo.c +++ b/generic/Geo.c @@ -1276,6 +1276,27 @@ ZnPointInAngle(int start_angle, } /* + * PointCartesianToPolar -- + * Convert a point in cartesian coordinates (delta_x, delta_y) + * in polar coordinates (rho, theta) + * in a reference system described by angle heading + * (angles running clockwise) to a point . + * + */ +void +ZnPointCartesianToPolar(ZnReal heading, + ZnReal *rho, + ZnReal *theta, /* in degree -180 , + 180 */ + ZnReal delta_x, + ZnReal delta_y) +{ + ZnReal theta_rad; + theta_rad = heading - ZnProjectionToAngle(delta_x,delta_y) - M_PI_2; + *theta = ZnRadDeg(theta_rad); + *rho = sqrt( delta_x * delta_x + delta_y * delta_y ); +} + +/* * PointPolarToCartesian -- * Convert a point in polar coordinates (rho, theta) * in a reference system described by angle heading diff --git a/generic/Geo.h b/generic/Geo.h index 08c5892..36205aa 100644 --- a/generic/Geo.h +++ b/generic/Geo.h @@ -269,6 +269,13 @@ ZnPointInAngle(int start_angle, ZnPoint *p); void +ZnPointCartesianToPolar(ZnReal heading, + ZnReal *rho, + ZnReal *theta, + ZnReal delta_x, + ZnReal delta_y); + +void ZnPointPolarToCartesian(ZnReal heading, ZnReal rho, ZnReal theta, |