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 中没有旋转椭圆功能,解决方法是使用贝塞尔三次近似。请参阅帖子如何用贝塞尔曲线创建圆?关于如何用四个贝塞尔弧逼近圆。那么椭圆只是一个拉伸的圆,用同样的方式拉伸控制点就足够了。
从单位圆开始,按轴长度缩放控制点,应用所需的旋转并平移到所需的中心。缩放和旋转参数可以从给定的长轴(加上短轴的长度)得出。
另一种方法是使用椭圆的参数方程并将其绘制为折线。