【问题标题】:Calculate vector with given angle and length计算给定角度和长度的向量
【发布时间】:2014-11-15 21:20:21
【问题描述】:

有什么方法可以在 javascript 中调用具有 x 和 y 坐标和方向(以度为单位的角度)的函数,它将返回一组已被“移动”的新坐标' 在原始坐标给出的方向上增加 10 像素?我环顾四周,但我只能找到获得两个给定坐标角度的方法。

【问题讨论】:

  • 当你说Direction时,你打算如何描述这个?例如 - 你可以相对于 x 轴的角度 (θ)。描述这一点的方法对您的回答很重要。 javascript 真的无关紧要,因为无论语言如何,实现都是相同的。

标签: javascript coordinates angle


【解决方案1】:

此函数返回新坐标的数组[xCoord, yCoord]:

function myFunction(xCoord, yCoord, angle, length) {
    length = typeof length !== 'undefined' ? length : 10;
    angle = angle * Math.PI / 180; // if you're using degrees instead of radians
    return [length * Math.cos(angle) + xCoord, length * Math.sin(angle) + yCoord]
}

【讨论】:

  • 没有意义使用!== 运算符,!= 会很好,因为你知道你正在将它与一个字符串进行比较并且你知道typeof 返回一个字符串。
  • 你是对的,!= 就足够了,但是使用严格的相等运算符 !== 和 === 是 recommended best practice 因为它不鼓励类型强制,这是携带遵循不可记忆的规则。
【解决方案2】:

我只是想指出,恕我直言,答案不正确。我创建了一个JSFiddle,表明正确的实现必须是这样的:

function getRelativeVector(angle, length, xOffset, yOffset) {
    angle = angle * Math.PI / 180; 
    return { 
        X:length * Math.sin(angle) + xOffset, 
        Y:length * Math.cos(angle) + yOffset 
    };
}

@Audrius 和@Markus 在这里展示的其他解决方案只是简单地扭曲为cos 和sin。它们仅适用于 0 到 45 度之间的角度。

公式是:

  • X = length * sin(angle) + xLocation
  • Y = length * cos(angle) + yLocation

【讨论】:

    【解决方案3】:

    x 坐标的偏移是L*cos(a),y 坐标的偏移是L*sin(a),其中a 是角度(“给定方向”),L 在您的情况下是 10 像素。

    【讨论】:

    • 当我执行10*Math.cos(90) 时,它返回-4.480736161291702,如果90 度是正确的,那不应该是10 度吗?
    • 查看我的回复。 Math.cos() 和 Math.sin() 以弧度为单位的角度作为参数,因此您需要将度数转换为弧度(请参阅我的代码中的注释)。
    • 哦,我明白了,这使用弧度而不是度数,可能应该指定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2018-08-10
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多