1个稳定版本

1.0.0 2021年11月12日

#40 in #geography

自定义许可

16KB
319

多边定位

这是一个基于Rust的多边定位库,它松散地基于Java trilateration library

许可

MIT


lib.rs:

githubcrates-iodocs-rs


这是一个基于Rust的多边定位库,它松散地基于Java trilateration library


详细信息

  • 它公开了一个函数,该函数使用一个以Measurement结构体为输入的向量。输出将是名为Point的元组结构,其中第一个元组槽包含输出坐标作为向量

    use multilateration::{multilaterate, Measurement, Point};
    
    fn main() -> Result<()> {
      let measurements = vec![
        Measurement::new(Point(vec![1.0, 1.0, 1.0]), 1.0),
        Measurement::new(Point(vec![3.0, 1.0, 1.0]), 1.0),
        Measurement::new(Point(vec![2.0, 2.0, 1.0]), 1.0),
      ];
    
      let coordinates = multilaterate(measurements).unwrap().0;
      println!("Coordinates are: {:?}", coordinates);
      Ok(())
    }
    
    Coordinates are: [2.0, 1.0000157132198315, 0.9943941804736127]
    

错误条件

  • 点具有不同的维度
  use multilateration::{multilaterate, Measurement, Point};

  fn main() -> Result<()> {
    let measurements = vec![
      Measurement::new(Point(vec![1.0, 1.0]), 1.0),
      Measurement::new(Point(vec![3.0, 1.0, 1.0]), 1.0),
      Measurement::new(Point(vec![2.0, 2.0, 1.0]), 1.0),
    ];

    let result = multilaterate(measurements);
    println!("Result is: {:?}", result);
    Ok(())
  }
Result is: Err(All points must have the same dimensions)
  • 点没有维度
  use multilateration::{multilaterate, Measurement, Point};

  fn main() -> Result<()> {
    let measurements = vec![
      Measurement::new(Point(vec![]), 1.0),
      Measurement::new(Point(vec![]), 1.0),
      Measurement::new(Point(vec![]), 1.0),
    ];

    let result = multilaterate(measurements);
    println!("Result is: {:?}", result);
    Ok(())
  }
Result is: Err(Points must contain at least one dimension)

依赖项

~1MB
~23K SLoC