基于three的晴雨表(简易制作)

最近学了three和echarts,在可视化图表中看到了一个优秀的案例,用晴雨表反映出多种属性的关联性和差异;市面上大多数晴雨表都是平面,基于D3或者echarts制作,于是我尝试着用three做一个沉浸式的晴雨表

创建晴雨表需要用到组和mesh
     var barometer = new THREE.Group();scene.add(barometer);var barometer_data = new Array(20 * 30);

考虑到晴雨表需要在不同的环境下进行缩放和位置的移动,所以建立了一个组,然后这里创建了一个20x30的数组,是想创建一个20*30的方块阵,每个方块通过颜色和大小来表示两种属性

for (let i = 0; i < 20; i++) {for (let j = 0; j < 30; j++) {let index = i * 30 + j;barometer_data[index] = new THREE.Mesh(new THREE.CubeGeometry(1e2, 1e2, 10),new THREE.MeshStandardMaterial({color: 0x000000}));barometer_data[index].position.set(j * 100 - 1500,i * 100 - 1000,0);barometer.add(barometer_data[index]);}}

这里我们把方块按2000*3000的大小规则排列,可以得到这样一个效果,当然,这里由于我设置的背景色为白色,所以我把方块的初始颜色设置为黑色

数据模拟

然后我们可以进行一个模拟,模拟20个城市在30天内的AQI和PM2.5数值,然后通过晴雨表呈现,晴雨表的横纵轴表示日期和城市,颜色反映AQI,方块的大小反映PM2.5

首先我们写两个数据转换的函数
    function AQIColor(AQI, AQI_max = 100) {let colors = ['#0077ff','#00ff55','#ffee00','#ff7700','#ff2200'];return colors[Math.ceil((AQI / AQI_max) * 5) - 1];}function PM25Scale(PM25, PM25_max = 100) {return PM25 / PM25_max;}
然后我们再写一个通过随机数据刷新方块的材质和几何属性的函数
function barometerFresh() {for (let i = 0; i < 20; i++) {for (let j = 0; j < 30; j++) {let index = i * 30 + j;let AQI = Math.random() * 99 + 1;let PM25 = Math.random() * 99 + 1;barometer_data[index].material.color.set(AQIColor(AQI));barometer_data[index].scale.set(PM25Scale(PM25), PM25Scale(PM25), 1);}}}

调用函数后我们可生成如上图的所示的晴雨表,但由于考虑到实际的气象数据,并不会出现如此大的差异(呈现效果并不能反映一定的信息),于是我们把模拟数据范围限定一下,来尽可能还原一个真实的气象情况

模拟真实数据
function barometerFresh() {for (let i = 0; i < 20; i++) {for (let j = 0; j < 30; j++) {let index = i * 30 + j;//不平稳// let AQI = Math.random() * 99 + 1;// let PM25 = Math.random() * 99 + 1;//仿真let AQI = Math.random() * 40 + 5;let PM25 = AQI + 30;barometer_data[index].material.color.set(AQIColor(AQI));barometer_data[index].scale.set(PM25Scale(PM25), PM25Scale(PM25), 1);}}}barometerFresh();

现在我们基本上可以得到一个呈现效果较好的晴雨表:AQI的值基本随着PM25增大而增大,下次我们再拿一组真实数据来测试,并尝试加入信息提示和交互

基于three的晴雨表相关推荐

  1. 基于RTT-MicroPython制作自带BGM的新型肺炎晴雨表

    简要说明 基于 RTT-MicroPython 制作自带BGM的新型肺炎晴雨表,主要使用的板子是"麻雀1号开发板",通过"MicroPython"语言编程实现联 ...

  2. 基于微信小程序的大学生心理健康测试设计与实现 .docx

    目录 1 绪论 3 1.1 项目开发背景 3 1.2 项目开发意义 3 1.3 项目主要的内容 4 2 相关技术介绍及系统环境开发条件 5 2.1相关技术介绍 5 2.2系统环境开发条件 6 3 系统 ...

  3. 基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第四篇)飞行特性

    基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第四篇)飞行特性 自动起飞 固定翼飞机可以自动发射多种类型的飞机.下面的说明将教你如何设置你的任务 ...

  4. 嵌入式行业经济发展和欧盟工业发展的晴雨表,你关注了么?

    嵌入式技术无处不在--无论在汽车.数据和通信系统.工业和消费电子产品,还是航空航天领域. 作为嵌入式行业经济发展和欧盟工业发展的晴雨表,embedded world(德国)国际嵌入式展,数十年始终致力 ...

  5. 基金分析工具箱(第一期)—— Morningstar主动/被动晴雨表

    基金分析工具箱(第一期)-- Morningstar主动/被动晴雨表 私募云通 fofpower https://mp.weixin.qq.com/s/DuvOf3mgpb1rB21WitqvTA 注 ...

  6. 全面解读沃达丰《物联网市场晴雨表》

    全球著名的跨国移动运营商沃达丰于今年九月初发布了第四份<物联网市场晴雨表>(2016版),此报告为物联网领域行业领先的全球性调查,其中包含了关于中国物联网市场的调研与分析.近日,IT168 ...

  7. 软件开发项目管理检查清单:天气晴雨表

    检查清单用于确认作业或工程是否存在遗漏,是反映项目管理是否存在问题的"天气晴雨表".下面是软件开发项目管理的一个检查清单,比本章中所言"软件开发项目管理过程中的祸根及其后 ...

  8. 电子词典(基于TCP协议多进程通信和数据库)

    项目:电子词典 项目要求: 登录注册功能,不能重复登录,重复注册.用户信息也存储在数据库中. 单词查询功能 历史记录功能,存储单词,意思,以及查询时间,存储在数据库 基于TCP,支持多客户端连接 采用 ...

  9. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

最新文章

  1. 50倍时空算力提升,阿里云RDS PostgreSQL GPU版本上线
  2. 有趣、好玩、有料的网站收藏
  3. geoprocessor and georocessing 的关系
  4. 19年三本毕业,做了三年的嵌入式软件。
  5. 聊一聊我自己的从业经历和感悟
  6. java定时器检测状态_java 定时检测服务器端口状态方法(一)
  7. c语言输入相应的成绩评定信息,C语言机练习题记答案.doc
  8. 基于SSM的企业员工管理系统
  9. 小程序毕设作品之微信酒店预订小程序毕业设计(1)开发概要
  10. 僵尸网络--botnet--DDoS 章2
  11. java 工作簿_将多个Excel工作簿合并到一个工作簿中
  12. 三星n8000平板_三星n8000拆机方法介绍【图解】
  13. [ZJOI2018]保镖
  14. 口袋电子秤方案芯片CSU18P88
  15. python图片自动上色_自己实现黑白图片自动上色AI(一)
  16. SpringCloud Gateway堆外内存溢出排查
  17. 公众号点击图片变成另一张_朋友圈也能发九宫格图片,再也不犯选择困难症
  18. 【巨杉数据库SequoiaDB】限额开放!巨杉数据库中级工程师认证计划正式开启!
  19. 浅夏,盈一眸清凉,捻一指馨香
  20. JSON.prase()报错 unexcept token

热门文章

  1. win10配置jdk1.8 的环境变量
  2. vsftpd 创建虚拟用户,添加黑名单 常见550 500报错解决方案
  3. 中小企业做软文网络发布比较好的方法推荐
  4. 北京智能计算产业研究院落户顺义 中科睿芯联手计算所、顺义区打造“产业园2.0”丨Xtecher 前线
  5. QQ群文件高速下载的方法
  6. (四)Kubernetes - 手动部署(二进制方式安装)
  7. 企业微信通过群聊机器人用springboot发送信息
  8. 多图介绍iMazing苹果手机管理软件的使用体验
  9. 数据仓库规范建设指南
  10. FonePaw iPhone Data Recovery Mac(iphone数据恢复软件)