天天看點

根據”圓心角“求斜橢圓坐标

                                                                              軟體架構師何志丹

根據“圓心角”弧度(函數會将圓心角轉成離心角),擷取斜橢圓上的點坐标。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的效果一樣。