javascript - 如何通过给定的 2 个点计算弧的 'start' 和 'end' Angular ?

标签 javascript math processing trigonometry p5.js

我一直在尝试使用 p5.js 在 Canvas 上绘制 arc。我得到了起点和终点,我使用 pythagoras 使用这两个点计算的弦长,还给出了高度和宽度值。

为了绘制弧线,我需要使用以下函数; arc(x, y, w, h, start, stop, [mode], [detail]) 文档引用 here

start & stop 参数是指以弧度指定的开始和停止 Angular 。如果没有这些 Angular ,我无法绘制弧线,也无法使用我得到的信息来计算它们。

我搜索了很多与我的问题类似的例子,但建议计算中心 Angular ,我也无法这样做。即使我能够计算出中心 Angular ,我之后应该如何获得开始和停止 Angular ?

我在 GeoGebra 上画了一些示例插图; Initial Given Stuff

Final Arc

最佳答案

向量的 Angular 可以用atan2()计算.

请注意:

tan(alpha) = sin(alpha) / cos(alpha)

如果你有一个向量 (x, y),那么向量相对于 x- 的 Angular (alpha)轴是:

alpha = atan2(y, x);

圆弧的start_anglestop_angle,圆心为(cpt_x, cpt_y ), 起点为(spt_x, spt_y) 终点为(ept_x, ept_y),可以通过以下方式计算:

start_angle = atan2(spt_y-cpt_y, spt_x-cpt_x);
stop_angle  = atan2(ept_y-cpt_y, ept_x-cpt_x);

查看示例,停止 Angular 取决于鼠标位置:

var sketch = function( p ) {

p.setup = function() {
    let sketchCanvas = p.createCanvas(p.windowWidth, p.windowHeight);
    sketchCanvas.parent('p5js_canvas')
}

p.windowResized = function() {
    p.resizeCanvas(p.windowWidth, p.windowHeight);
}

p.draw = function() {

    let cpt        = new p5.Vector(p.width/2, p.height/2);
    let rad        = p.min(p.width/2, p.height/2) * 0.9;
    let stop_angle = p.atan2(p.mouseY-cpt.y, p.mouseX-cpt.x);

    p.background(192);
    p.stroke(255, 64, 64);
    p.strokeWeight(3);
    p.noFill();
    p.arc(cpt.x, cpt.y, rad*2, rad*2, 0, stop_angle);
}

};

var circle = new p5(sketch);
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/p5.js"></script>
<div id="p5js_canvas"></div>

关于javascript - 如何通过给定的 2 个点计算弧的 'start' 和 'end' Angular ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769249/

相关文章:

javascript - 根据复选框更改选择选项的值

javascript - Sequelize : join tables beyond first degree relationship

javascript - 如何在点击时重置 .table-stripe 类

math - 以下大 O 表示法彼此等价吗?

java - 遍历 Java 中的 HashMap

java - 如何在每次鼠标单击某个区域时绘制一个矩形?

javascript - 动态对象 html - 在 Canvas 上通过函数绘制的对象之间进行交替,并使用范围/ slider 来更改模式

javascript - 试图在圆的边缘绘制坐标

Android float 乘以一个因子 0.004739

java - 为什么每次运行下面的代码Eclipse都会提示 'Editor does not contain Applet'?解决办法是什么?