軟體架構師何志丹
根據“圓心角”弧度(函數會将圓心角轉成離心角),擷取斜橢圓上的點坐标。ptCenter,橢圓中心;a橢圓長軸長度;b,橢圓短軸長度;radian,點于橢圓長軸夾角的弧度;dChangZhouAngle,長軸弧度
CDoublePoint2d GetPointOnEllipse(const CDoublePoint2d& ptCenter, double a, double b, double radian, double dChangZhouAngle)
{
const double dLiXin = atan2(a*sin(radian), b*cos(radian));//離心角
double x = a*cos(dLiXin)*cos(dChangZhouAngle) - b*sin(dLiXin)*sin(dChangZhouAngle) + ptCenter.x;
double y = a*cos(dLiXin)*sin(dChangZhouAngle) + b*sin(dLiXin)*cos(dChangZhouAngle) + ptCenter.y;
return CDoublePoint2d(x, y);
}
問題:
一,為什麼不用atan?
答:atan的範圍是[-π/2,π/2],atan2的範圍是(-π,π]。前者隻能表示兩個象限,後者可以表示4個。
二,為什麼不atan2(a*tan(radian),b)?
答:這樣寫,和用atan的效果一樣。