coordinateByRadian method
Get coordinate on an ellipse centered at center
at an angle
given in radians.
If center is not specified, origin (0,0) is assumed.
Factor factor
is multiplied with the amplitude at the angle to support polar charting
Implementation
GeoCoordinate2D coordinateByRadian(double angle,
[GeoCoordinate2D? center, double factor = 1.0]) {
// calculate sin and cos of angle
double sinr = sin(angle);
double cosr = cos(angle);
// calculate x and y positions in ellipse
// x = +/- ( xradius * yradius * cos(angle) / sqrt( (yradius * cos(angle))^2 + (xradius * sin(angle))^2 )
// y = +/- ( xradius * yradius * sin(angle) / sqrt( (yradius * cos(angle))^2 + (xradius * sin(angle))^2 )
double cx = factor *
(_xy * cosr) /
sqrt(pow(yRadius * cosr, 2) + pow(xRadius * sinr, 2));
double cy = factor *
(_xy * sinr) /
sqrt(pow(yRadius * cosr, 2) + pow(xRadius * sinr, 2));
return center == null
? GeoCoordinate2D(cx, cy)
: GeoCoordinate2D(center.x + cx, center.y + cy);
}