【问题标题】:Finding closest 90 degree angle spot寻找最近的 90 度角点
【发布时间】:2014-12-02 14:25:17
【问题描述】:

我已经走了很远,但有些东西似乎不起作用。

A = 50.88259382849774,6.003988087177277
B = 50.88269282423443,6.0036662220954895
C = 50.882530369581545,6.003847271203995

C 坐标与 90 度线 (x) 有点偏离,我制作的这个函数应该将 C 定位在最接近 x 线的位置。

this.snapCoords = function(a, b, c){
    var result = (b.x-a.x)*(c.x-b.x)+(b.y-a.y)*(c.y-b.y);

    var negative = false;
    if(result < 0){
        result = result*-1;
        negative = true;
    }
    result = Math.sqrt(result);
    result = result/2;

    if(negative === false){
        var d = {x: c.x+result, y: c.y-result};
    }
    else{
        var d = {x: c.x-result, y: c.y+result};
    }

    console.log(d); // returns : 50.88246729610898,6.003910344676565
}

它确实获得了 90 度 (x) 线,但不是最接近的方式。我的函数肯定还是有问题,但我想不通。

编辑:

这是我的问题

我的函数将第三个坐标放在 C 上,它是 90 度,但不是它应该在的位置(红点)它以某种方式延伸到更远的点。

【问题讨论】:

  • 到底是什么问题?
  • 您的问题是:为什么“返回 : 50.882467..., 6.003910344... 不同于 C=50.882430369..., 6.00384727... 以上?这很可能是数字问题(特别是如果您使用浮点数而不是双精度数)。
  • 这正是我的问题。顺便说一句,我编辑了我的问题。
  • 我认为只知道A、B、C点(上图标注)是无法推断出红点的位置的。如果你有梯形上第 4 个点的位置,那么你可以。
  • 你当然可以推断出红点所在的直线,但不能推断出它与B的距离。

标签: javascript math coordinates coordinate-systems


【解决方案1】:

我认为 OP 试图将点 C 投影到通过点 B 的线上,并且垂直于线 AB。如果是这种情况,则投影的数学运算不正确。您可以找到投影点 D 为

D= C - 点(vec(BC), vec(AB)) * vec(AB)/|vec(AB)|^2

通过此计算,投影点 D 将为 (50.8825952820492, 6.00363622113846)。

以下是A、B、C、D点的图片:

【讨论】:

  • 您确实正确理解了我,但它不起作用。这就是我将 C 放在您给 i62.tinypic.com/2zrm4n4.jpg 的坐标上时得到的结果,坐标应该非常接近 50.882531823134975,6.0038467745462185(gps 谷歌地图坐标顺便说一句)
  • 当我将 C 点放在红点上时,它应该像你说的那样给我垂直于 AB 线的点的坐标。这将非常接近红点,但非常精确地在 AB 的 90 度角上
  • 不知道为什么你得到的结果与我的不同。我通过添加所有 3 个点 A、B 和 C 以及投影点 D 的图片来编辑我的帖子。
  • 也许我解释错了,但 C 点应该在红点上。正如您在图像中看到的那样,它应该是一个矩形,但我无法正确理解。所以我需要知道的是红点的坐标。 (对不起,我一直在试图弄清楚但无法正确解决问题的迟到答案)
  • @OP:您最新示例的 D 坐标确实应该是 (7,5)。我用我的公式计算并得到(7,5)。以下是一些中间计算的结果,供您验证结果:dot(vec(BC),vec(AB)) = -12。 vec(AB)/|vec(AB)|^2=(1/6, 1/6)。因此,他们的乘积将是 (-2, -2) 和 (5, 3) - (-2, -2) = (7, 5)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2013-07-27
  • 2020-10-02
  • 1970-01-01
相关资源
最近更新 更多