根据角度求椭圆上坐标

计算椭圆上坐标 分两步,求离心角和根据离心角求椭圆上坐标。

椭圆方程

椭圆方程是
x2a2+y2b2=(xa)2+(yb)2=(cos(t))2+(sin(t))2=1 \frac{x^2}{a^2} + \frac{y^2}{b^2} = \left(\frac{x}{a}\right)^2+\left(\frac{y}{b}\right)^2=\left(cos\left(t\right)\right)^2+\left(sin\left(t\right)\right)^2=1
这个tt就是离心角的角度。

求离心角

如下图,已知椭圆的角pp,要求主离心角tt。如下图,小圆为椭圆内切,大圆为椭圆外切。虚线除OE外,全为垂线。
根据角度求椭圆上坐标
根据椭圆方程,可知E的y坐标 Ey=bsint(t)=AyE_y = b*sint\left(t\right)=A_y
又有
tan(t)=BD/ODtan\left(t\right)=BD/OD tan(p)=ED/ODtan\left(p\right)=ED/OD
那么 tan(t)tan(p)=BDED=BDAC=ODOC=ab\frac{tan\left(t\right)}{tan\left(p\right)} = \frac{BD}{ED}=\frac{BD}{AC}=\frac{OD}{OC}=\frac{a}{b}
所以,tan(t)=tan(p)abtan\left(t\right)=tan\left(p\right)*\frac{a}{b}

求解tt值时,用函数atan2(x,y)atan2(x,y),这样求出的值是[π-\pi,π\pi],使用atanatan得到的值在[π2-\frac{\pi}{2},π2\frac{\pi}{2}]

根据离心角求椭圆上给定角度的坐标

根据椭圆公式,可得
x=acos(t) x = a*cos\left(t\right) y=bsin(t) y = b*sin\left(t\right)

椭圆出现平移及旋转的情况

这种情况,需要先将椭圆旋转并平移到标准椭圆位置,计算完点坐标再反算回去。如下图
根据角度求椭圆上坐标

旋转后的椭圆坐标与标准椭圆坐标的对应关系如下所示公式:
(xy)=R((XY)(XcYc))\begin{pmatrix}x \\ y\end{pmatrix} = R*\left(\begin{pmatrix}X \\ Y\end{pmatrix}-\begin{pmatrix}X_c \\ Y_c\end{pmatrix}\right)
其中 , R=(cos(γ)sin(γ)sin(γ)cos(γ))R=\begin{pmatrix} cos\left(\gamma \right) & sin\left(\gamma \right) \\ -sin\left(\gamma \right) & cos\left(\gamma \right) \end{pmatrix}
R1=RT=(cos(γ)sin(γ)sin(γ)cos(γ))R^{-1}=R^{T}=\begin{pmatrix} cos\left(\gamma \right) & -sin\left(\gamma \right) \\ sin\left(\gamma \right) & cos\left(\gamma \right) \end{pmatrix}
那么,旋转后的椭圆上点坐标公式为
(XY)=R1(xy)+(XcYc)\begin{pmatrix}X \\ Y\end{pmatrix} = R^{-1}*\begin{pmatrix}x \\ y\end{pmatrix} +\begin{pmatrix}X_c \\ Y_c\end{pmatrix}
最终,
X=cos(γ)xsin(γ)y=cos(γ)acos(t)sin(γ)bsin(t)+XcY=sin(γ)x+cos(γ)y=sin(γ)acos(t)+cos(γ)bsin(t)+Yc\begin{array}{c} X= cos\left(\gamma \right)*x -sin\left(\gamma \right)*y = cos\left(\gamma \right)*a*cos\left(t\right) -sin\left(\gamma \right)*b*sin\left(t\right)+X_c \\ Y= sin\left(\gamma \right)*x +cos\left(\gamma \right)*y = sin\left(\gamma \right)*a*cos\left(t\right) +cos\left(\gamma \right)*b*sin\left(t\right)+Y_c \end{array}
参考:
网页1
网页2