当前位置: 首页 > 知识库问答 >
问题:

Javascript中的三维三边测量

霍修筠
2023-03-14

我试图用Javascript使用https://github.com/gheja/trilateration.js而且它似乎在起作用。然而,某些简单的情况应该产生解决方案,但事实并非如此。例如:

var p1 = {x:69, y:0,  r:69, z:0}
var p2 = {x:0,  y:50, r:50, z:0};
var p3 = {x:0,  y:80, r:80, z:0};
trilaterate(p1, p2, p3, false)

这似乎是一个简单得可笑的例子,应该在x:0,y:0产生一个解,但是函数告诉我没有解。我是否对三边测量有误解,或者函数中是否存在错误?

任何帮助都将不胜感激。

共有2个答案

须旭
2023-03-14

看起来这是你找到的回购的问题。

特别是如果你看这一行https://github.com/gheja/trilateration.js/blob/master/trilateration.js#L111并注销它用于计算z=Math的值。sqrt(sqr(p1.r)-sqr(x)-sqr(y))

sqr(p1.r): 4761
-sqr(x) - sqr(y): -4761.000000000017
sqr(p1.r) - sqr(x) - sqr(y): -0.000000000017
z: Math.sqrt(-0.000000000017)
therefore: z: NaN

这只是浮点数的一个特性(浮点数学坏了吗?)。如果你改变你的参数的顺序(三边形(p1,p3,p2,false)),你会得到两个非常接近正确答案的值。

实际上,你的测试应该是一个特例;前两个球体的交点是一个点。如果这是一个预期的用例,你可以考虑放弃回购和测试仅仅接触球。

阴宏爽
2023-03-14

是的,它实际上是库中的一个错误,感谢@logidelic找到它,感谢@dtudury追踪它。

如果它接近于零,我现在通过将值归零来修复它:

b = sqr(p1.r) - sqr(x) - sqr(y);

if (Math.abs(b) < 0.0000000001)
{
    b = 0;
}

z = Math.sqrt(b);
 类似资料:
  • 我一直在通过维基百科上的页面阅读三边测量,并试图制作一个我自己的二维版本。然而,我遇到了一些问题,我希望对数学有更好理解的人能帮我解决。 我是和C#一起做这件事的。 我的场景包括屏幕中央的3个球体。球体1总是在标记0,0,0。在这些球体旁边,我有一个立方体,我想移动到3个球体的交叉点。 到目前为止,这是我的代码: P1,P2和P3是我对维基页面以下数学公式的解释: 我的X和Y公式如下: 当我将所有

  • 我试图实现三维点之间的三元组。我最终尝试使用这个库三元组。我使用了下面给出的例子,并尝试执行它。下面是代码 那么现在我应该期望什么类型的输出。我得到了一些奇怪的输出,我无法理解它本身。 所以,请让我知道,如果我做错了什么,或者它是真实的数据,我应该解析,并用于其他一些计算。

  • 我正在使用wifi三边测量技术开发室内导航应用程序, 我有3个接入点我得到了lat 我需要转换每个lat 加上如果我得到x,y不可能转换成它的拉特 谢啦

  • 我目前正在研究一个程序,利用RSSI来确定基于信号强度的位置。有人知道三边化的工作java示例在哪里吗?我在网上找不到。 该程序基本上需要3个距离,这是从RSSI得出的距离,然后是三个点的经纬度,然后使用2维三边测量确定用户的位置(我现在忽略了每个信标的高度)。 我在这里看到了一个Python,但我对Python的了解还不足以理解它。

  • 如我所知,三次分割是寻找三个球体交汇区域中心的过程。我在c中写了三边测量法,我取了方程式,它是维基百科中三边测量中心和二维三边测量的细节 举一个如下的例子: 例1:p1(5,10),p2(15,10),p3(10,20),r1=9,r2=7,r3=8,答案是(11.6,13.8),这是逻辑答案。 但当像下面的例子一样的情况下,答案就像一个垃圾数字,我从计算中确定,但在这种情况下,我不知道原因! E

  • 三维地球支持的功能包括:新建三维地球、添加图层、绘制要素、执行分析、保存场景。 新建三维地球 您可以在应用中心中点击三维地球,在弹出页面中点击“立即体验”。您也可以依次点击“资源中心”,“场景”,“创建场景”打开三维地球。 在资源中心中,可以查看或编辑您保存的场景。 添加图层 点击左上角工具栏添加按钮即可添加图层。 您可以使用我们为您提供的公有数据服务,也可以在自定义服务中使用您在云存储中上传并发