【问题标题】:translate coordinates relative to line segment相对于线段平移坐标
【发布时间】:2017-01-17 16:01:10
【问题描述】:

我需要编写一个函数(在 Javascript 中),它接受线段的端点和一个附加点,并返回该点相对于起点的坐标。所以,根据这张图:

function perpendicular_coords(x1,y1, x2,y2, xp,yp)

返回 [xp',yp'] 其中 xp' 是从 (xp,yp) 沿垂直于线段的直线的距离,yp' 是从 (x1,y1) 到该垂直线与直线相交点的距离段。

到目前为止我已经尝试过:

function rotateRad(cx, cy, x, y, radians) {
    var cos = Math.cos(radians),
        sin = Math.sin(radians),
        nx = (cos * (x - cx)) + (sin * (y - cy)) + cx,
        ny = (cos * (y - cy)) - (sin * (x - cx)) + cy;
    return [nx, ny];
}

[xp', yp'] = rotateRad(x1,y1, xp, yp, Math.atan2(y2-y1,x2-x1));

函数不是我写的;从https://stackoverflow.com/a/17411276/1368860得到它

【问题讨论】:

  • 我假设你想返回[xp, yp],而不是提供的[xp', yp'],否则问题很简单...... :-)
  • 图片中好像多了一个 '。我有三个蓝色点的坐标,想要两个橙色线段的距离。
  • @ScottSauyet,我在问题中添加了我尝试过的内容。谢谢。
  • 我写错了调用函数的方式...会修复它。

标签: javascript graphics transformation


【解决方案1】:

我采用了不同的方法,结合了两个功能:

  1. 为了得到 yp',我使用这里的答案找到了交点:Perpendicular on a line from a given point
  2. 为了获得 xp',我使用以下公式计算 (xp, yp) 与直线之间的距离:https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line

不是最优雅的解决方案,但它似乎有效。

结果代码https://jsfiddle.net/qke0m4mb/

function perpendicular_coords(x1, y1, x2, y2, xp, yp) {
  var dx = x2 - x1,
      dy = y2 - y1;

  //find intersection point    
  var k = (dy * (xp-x1) - dx * (yp-y1)) / (dy*dy + dx*dx);
  var x4 = xp - k * dy;
  var y4 = yp + k * dx;

  var ypt = Math.sqrt((y4-y1)*(y4-y1)+(x4-x1)*(x4-x1));
  var xpt = distance(x1, y1, x2, y2, xp, yp);
  return [xpt, ypt];
}

// Distance of point from line
function distance(x1, y1, x2, y2, xp, yp) {
  var dx = x2 - x1;
  var dy = y2 - y1;

  return Math.abs(dy*xp - dx*yp + x2*y1 - y2*x1) / Math.sqrt(dy*dy + dx*dx);
}

【讨论】:

  • 所以,看起来问题不在于我的转换代码,而在于我后来对结果所做的事情。我认为您的解决方案返回的答案与我的相同。
  • 别管我刚才说的。我的全乱了。你的作品。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多