javascript - 如何在特定度数下获取Javascript中椭圆的边缘坐标?

标签 javascript jquery math geometry ellipse

我正在尝试用 Javascript 确定椭圆 SVG 的边缘。我现在拥有的是椭圆的中心坐标,它上面的矩形坐标,以及椭圆的上/左/右/下边缘,但是我如何确定椭圆的 A、B、C、D 点坐标在 Javascript 中?

enter image description here

最佳答案

Rational parametric equation椭圆的可能有帮助:

var e = document.querySelector('ellipse'),
  p = document.querySelector('circle');

var rx = +e.getAttribute('rx'),
  ry = +e.getAttribute('ry');

var angle = 0;
const spin = () => {
    angle *= angle !== 360;
    var t = Math.tan(angle++ / 360 * Math.PI);
    var px = rx * (1 - t ** 2) / (1 + t ** 2),
        py = ry * 2 * t / (1 + t ** 2);
    p.setAttribute('cx', px);
    p.setAttribute('cy', py);
    requestAnimationFrame(spin)
}

requestAnimationFrame(spin)
<svg viewBox="-105 -55 210 110" height="200" width="400">
<ellipse stroke="#000" fill="#fff" cx="0" cy="0" rx="100" ry="50"/>
<circle fill="red" r="3"/>
</svg>

所以对于你的 a、b、c、d 点:

var e = document.querySelector('ellipse'),
  a = document.querySelector('#a'),
  b = document.querySelector('#b'),
  c = document.querySelector('#c'),
  d = document.querySelector('#d');

var rx = +e.getAttribute('rx'),
  ry = +e.getAttribute('ry');

[a, b, c, d].forEach((p, i) => {
    var t = Math.tan(i * Math.PI / 4 + Math.atan(2 * ry / rx) / 2);
    var px = rx * (1 - t ** 2) / (1 + t ** 2),
        py = ry * 2 * t / (1 + t ** 2);
    console.log(p.id + '(' + px + ', ' + py + ')');
    p.setAttribute('cx', px);
    p.setAttribute('cy', py);
})
<svg viewBox="-105 -55 210 110" height="200" width="400">
<rect stroke="#000" fill="#fff" x="-100" y="-50" width="200" height="100"/>
<path stroke="#000" d="M-100-50L100 50zM-100 50L100-50z"/>
<ellipse stroke="#000" fill="none" cx="0" cy="0" rx="100" ry="50"/>
<circle id="a" fill="red" r="3"/>
<circle id="b" fill="red" r="3"/>
<circle id="d" fill="red" r="3"/>
<circle id="c" fill="red" r="3"/>
</svg>

关于javascript - 如何在特定度数下获取Javascript中椭圆的边缘坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660456/

相关文章:

javascript - 如何使用JQuery在主页加载.html文件?

javascript - react 路由器参数化重定向

php - 检查安全 cookie 并在 HTTPS 模式内重定向非 HTTPS 父级

javascript - 在一次 onclick 中使用不同的 div 进行两次 ajax 调用

javascript - 如何调试 "click"JavaScript 事件的处理程序未被调用的原因?

c# - 寻找一个.NET函数来求和,而不是溢出,只会返回int.MaxValue

javascript - jQuery 的字符串简单数学运算

javascript - 减少 JS 中的对象错误行为?

javascript - 改变第二列的颜色

javascript - 如何以方形图案移动对象?