当前位置: 首页 > news >正文

三边测量法:通过三点坐标和到三点的距离,返回第4点位置

 
public class IBeaconLocation {

    //计算手机与蓝牙基站的距离
    public static double calculateAccuracy(iBeaconClass.iBeacon beacon) {
        int txPower = beacon.txPower;
        double rssi = beacon.rssi;
        if (rssi == 0) {
            return -1.0; // if we cannot determine accuracy, return -1.
        }

        double ratio = rssi * 1.0 / txPower;
        if (ratio < 1.0) {
            return Math.pow(ratio, 10);
        } else {
            double accuracy = (0.89976) * Math.pow(ratio, 7.7095) + 0.111;
            return accuracy;
        }
    }

    //三边测量法
    // 通过三点坐标和到三点的距离,返回第4点位置
    public double[] calcPhonePosition(double x1, double y1, double d1,
                                      double x2, double y2, double d2,
                                      double x3, double y3, double d3) {
        double[] d = {0.0, 0.0};
        double a11 = 2 * (x1 - x3);
        double a12 = 2 * (y1 - y3);
        double b1 = Math.pow(x1, 2) - Math.pow(x3, 2)
                + Math.pow(y1, 2) - Math.pow(y3, 2)
                + Math.pow(d3, 2) - Math.pow(d1, 2);
        double a21 = 2 * (x2 - x3);
        double a22 = 2 * (y2 - y3);
        double b2 = Math.pow(x2, 2) - Math.pow(x3, 2)
                + Math.pow(y2, 2) - Math.pow(y3, 2)
                + Math.pow(d3, 2) - Math.pow(d2, 2);

        d[0] = (b1 * a22 - a12 * b2) / (a11 * a22 - a12 * a21);
        d[1] = (a11 * b2 - b1 * a21) / (a11 * a22 - a12 * a21);

        return d;

    }

    //double 四舍五入
    public int doubleRound(double num) {
        BigDecimal b = new BigDecimal(num);
        num = b.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();
        return (int) num;
    }

}

 

转载于:https://www.cnblogs.com/niray/p/4315468.html

相关文章:

  • PHP大神的十大优良习惯
  • 谈一谈二叉搜索树中序迭代器的关键设计
  • POJ 1984
  • Ubuntu 配置开机启动到字符界面
  • 【监控】天机镜——优土大数据平台应用级别监控利器
  • Webpack - CommonJs AMD 模块打包器
  • 浅谈Swift语法
  • 开通博客园
  • 简谈软件测试
  • Android更新UI的五种方式
  • 构造函数实例化
  • Lintcode: Merge Sorted Array II
  • C++ 常量类型 const 详解
  • 创建非arc的项目
  • processing fill()和stroke()函数
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【技术性】Search知识
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 5、React组件事件详解
  • ComponentOne 2017 V2版本正式发布
  • docker-consul
  • Java 多线程编程之:notify 和 wait 用法
  • Java 网络编程(2):UDP 的使用
  • Mysql数据库的条件查询语句
  • nodejs实现webservice问题总结
  • Vue全家桶实现一个Web App
  • 不上全站https的网站你们就等着被恶心死吧
  • 前端技术周刊 2019-02-11 Serverless
  • 使用Gradle第一次构建Java程序
  • 使用Swoole加速Laravel(正式环境中)
  • 数据科学 第 3 章 11 字符串处理
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 整理一些计算机基础知识!
  • ​如何防止网络攻击?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • (06)金属布线——为半导体注入生命的连接
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (简单) HDU 2612 Find a way,BFS。
  • (十)c52学习之旅-定时器实验
  • .java 9 找不到符号_java找不到符号
  • .Mobi域名介绍
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET MVC 验证码
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .Net8 Blazor 尝鲜
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .ui文件相关
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [ajaxupload] - 上传文件同时附件参数值
  • [Android]使用Retrofit进行网络请求
  • [bzoj4240] 有趣的家庭菜园
  • [C++参考]拷贝构造函数的参数必须是引用类型