【问题标题】:How to translate a point to specified distance at a specified angle? [closed]如何以指定角度将点平移到指定距离? [关闭]
【发布时间】:2016-12-29 12:10:39
【问题描述】:

我想将一个点沿以度为单位的直线平移到特定距离。

var initialPoint = [0,0];   //Starting Point
var distance = 100;         //Distance in pixels to be translated
var degree = 45;            //Direction of move
var translatedPoint = moveByDegree(initialPoint, degree, distance);

function moveByDegree(initialPoint, degree, distance)
{
    //formula to generate translatedPoint by degree & distance
    // . . . 

    return translatedPoint;
}
  • 0 度应该向上移动。
  • 180 度应该向下移动。
  • 90 度应该向右移动。
  • 270 度应该向左移动。
  • 其他角度对应于对角线方向。

给我简单的算法或 JavaScript 代码。

【问题讨论】:

  • 基本上,从原点:x: Math.cos(angle) * distysin 计算。虽然在这个公式中0 是正确的,而angle 应该是弧度。如果从原点开始,只需将相应的偏移量添加到结果中即可。
  • 您是在屏幕坐标中计算还是在通常方向的笛卡尔坐标中计算?

标签: javascript math geometry trigonometry


【解决方案1】:

你必须给出起始点、角度和运动单位。

Math.radians = function(degrees) {
  return degrees * Math.PI / 180;
};

function move(point, angle, unit) {
  var x = point[0];
  var y = point[1];
  var rad = Math.radians(angle % 360);

  x += unit*Math.sin(rad);
  y += unit*Math.cos(rad);

  return [x, y];
}

move([0,0], 180, 100);  // [0, 100]

【讨论】:

  • 你的意思是说这个公式只适用于上下,但是在其他角度上,它正在向相反的方向移动点,对吗?
  • 只要回答下面的问题,如果起点是[0,0],角度是90度,单位移动100,输出位置应该是多少? [100, 0] 或 [-100, 0]
  • 对不起,我失踪了(角度 % 360)。非常感谢。
  • 我很高兴它有帮助:)
  • 为了让move([0, 0], 180, 100) 输出[0, 100],它应该是y += unit * -Math.cos(rad); 而不是y += unit * Math.cos(rad);
猜你喜欢
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
相关资源
最近更新 更多