如何使用两个坐标用javascript绘制椭圆?

Jac*_*ang 5 javascript algorithm graphics 2d ellipse

就像下面的图片所示,我有两个坐标,我想画一个椭圆,其长轴边缘与这两点相匹配。

在此输入图像描述

我尝试获取这两个坐标之间的中点,并在这一个坐标上绘制一个椭圆形底。像这样的代码,下面的函数返回我想要的椭圆点数组:

 function add_oval(centre, x, y) {
    var assemble = new Array();
    var angle;
    var dot;
    var tangent = x / y;
    for (i = 0; i < 36; i++) {
        angle = (2 * Math.PI / 36) * i;
        dot = [centre.lng + Math.sin(angle) * y * tangent, centre.lat + Math.cos(angle) * y];
        assemble.push(dot);
    }
    return assemble;
}
Run Code Online (Sandbox Code Playgroud)

但问题是,这些只能画水平椭圆,我不知道如何改变角度。

有人知道如何解决我的问题吗?

小智 4

暗示

如果 JavaScript 中没有旋转椭圆功能,解决方法是使用贝塞尔三次近似。请参阅帖子如何用贝塞尔曲线创建圆?关于如何用四个贝塞尔弧逼近圆。那么椭圆只是一个拉伸的圆,用同样的方式拉伸控制点就足够了。

从单位圆开始,按轴长度缩放控制点,应用所需的旋转并平移到所需的中心。缩放和旋转参数可以从给定的长轴(加上短轴的长度)得出。

另一种方法是使用椭圆的参数方程并将其绘制为折线。