七、热力图展示

news2024/11/16 12:31:09

        在开发3d模型之中,热力图是非常常见的需求,比如需要了解人口密度,空气质量,热力分布等这些都需要热力图来展示,那么3d常见的热力图是怎么实现的呢,现在我们就来看看。先看效果图。

思路:

        1引入heatmap.js,h337是他自带的一个暴漏的方法用于使用

        2创建myheatmap.js用于创建一个HeatMapCanvas实例,使用canvas对象创建

        3在city.js引入并贴图展示

第一步

npm install heatmap.js --save

第二步

import h337 from '@rengr/heatmap.js'
export function getHeatmapCanvas (points, x = 500, y = 160) {
  var canvasBox = document.createElement('div')
  document.body.appendChild(canvasBox)

  canvasBox.style.width = x + 'px'
  canvasBox.style.height = y + 'px'
  canvasBox.style.position = 'absolute'
  var heatmapInstance = h337.create({
    container: canvasBox,
    backgroundColor: 'rgba(255, 255, 255, 0)', // '#121212'    'rgba(0,102,256,0.2)'
    radius: 20, // [0,+∞)
    minOpacity: 0,
    maxOpacity: 0.6,
  })
  // 构建一些随机数据点,这里替换成你的业务数据
  var data
  if (points && points.length) {
    data = {
      max: 40,
      min: 0,
      data: points,
    }
  } else {
    let randomPoints = []
    var max = 0
    var cwidth = x
    var cheight = y
    var len = 300

    while (len--) {
      var val = Math.floor(Math.random() * 30 + 20)
      max = Math.max(max, val)
      var point = {
        x: Math.floor(Math.random() * cwidth),
        y: Math.floor(Math.random() * cheight),
        value: val,
      }
      randomPoints.push(point)
    }
    data = {
      max: 60,
      min: 15,
      data: randomPoints,
    }
  }

  // 因为data是一组数据,所以直接setData

  heatmapInstance.setData(data)
  let canvas = canvasBox.querySelector('canvas')
  document.body.removeChild(canvasBox)
  return canvas
}

第三步,外部调用,记得要首先删除原先的点

import { getHeatmapCanvas } from './myheatmap'
//生成热力图
function initHeatMap () {
  removeHeatmap()
  let data1 = [
    {
      x: 120,
      y: 50,
      value: 400,
      radius: 80
    }
  ]
  let res1 = getHeatmapCanvas(data1, 500, 600)
  createPlaneByCanvas('first', res1, {
    x: 0,
    y: 70,
    z: 86
  })
}

//创建热力图模板
function createPlaneByCanvas (name, canvas, position = {}, size = { x: 400, y: 760 }, rotation = {}) {
  var geometry = new THREE.PlaneGeometry(size.x, size.y)
  var texture = new THREE.CanvasTexture(canvas)
  var material = new THREE.MeshBasicMaterial({
    map: texture,
    side: THREE.DoubleSide,
    transparent: true
    // color: '#fff'
  })
  texture.needsUpdate = true
  const plane = new THREE.Mesh(geometry, material)
  plane.material.side = 2
  plane.position.x = position.x || 0
  plane.position.y = position.y || 0
  plane.position.z = position.z || 0
  plane.rotation.x = rotation.x || 1.5707963267948966
  plane.rotation.y = rotation.y || 0
  plane.rotation.z = rotation.z || 0
  plane.name = name
  planeGroup.push(plane)
  // floor2Group.add(plane)
  scene.add(plane)
}

以上就是如何在3d模型中展示热力图的步骤,还是要在实战中慢慢体会才能完成自己技术的提升,有什么疑问可以留言和私信我哦,下期讲解更加炫酷的发光墙如何开发,大家期待着吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1047772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何训练聊天机器人面对复杂的语言环境和需求?

一些对话很容易规划 ,以今天早上点咖啡为例 。它有可能以相互问候为开场白,然后转移到请求上 。也许还会反复交流,敲定一些小细节(多大杯的咖啡,是否需要加奶油),然后付款,最后快速交…

【c语言的函数指针介绍】

C语言中的函数指针是一种特殊的指针,它指向函数而不是数据。函数指针允许你在运行时动态地选择要调用的函数,这使得你可以根据需要在不同的函数之间切换,或者将函数作为参数传递给其他函数。函数指针的声明和使用如下: 声明函数指…

3D孪生场景搭建:模型阵列摆放

阵列摆放概念 阵列摆放是指将物体、设备或元件按照一定的规则和间距排列组合的方式。在工程和科学领域中,阵列式摆放常常用于优化空间利用、提高效率或增强性能。 阵列摆放通常需要考虑间距、角度、方向、对称性等因素,以满足特定的要求和设计目标。不同…

【Element-UI】CUD(增删改)及form 表单验证(附源码)

目录 一、导言 1、引言 2、作用 二、CUD 1、增加修改 1.1、添加弹窗 1.2、定义变量 1.3、定义方法 1.4、完整代码 2、删除 2.1、定义方法 三、表单验证 1、添加规则 2、定义规则 3、提交事件 4、前端完整代码 一、导言 1、引言 增删改是计算机编程和数据库管理…

荣耀时刻!2023抖音电商作者峰会为优质直播间和卓越生态伙伴颁奖

9月27日,抖音电商在上海举行了以“向新成长”为主题的2023抖音电商作者峰会,并现场颁发了荣誉奖项。抖音电商优质直播间以及践行抖音电商作者精神四个维度的年度荣誉一一揭晓。 过去一年,数百万作者与众多品牌商家、MCN机构和精选联盟服务商…

AUTOSAR通信篇 - CAN网络通信(六:CanNm)

文章目录 功能介绍协调算法工作模式网络模式Repeat Message State(重复消息状态)Normal Operation State(正常运行/工作状态)Ready Sleep State(就绪睡眠状态) Prepare Bus Sleep Mode(预休眠模…

基于css变量轻松实现网站的主题切换功能

我们经常看到一些网站都有主题切换,例如vue官方文档。那他是怎么实现的呢? 检查元素,发现点击切换时,html元素会动态的添加和移除一个class:dark,然后页面主题色就变了。仔细想想,这要是放在以前&#xff0…

OpenAI宣布ChatGPT支持互联网浏览;GPT-4V(ision)介绍

🦉 AI新闻 🚀 OpenAI宣布ChatGPT支持互联网浏览 摘要:OpenAI宣布ChatGPT现在可以浏览互联网,由微软必应提供支持,并提供直接来源链接。这一功能对于需要最新信息的任务特别有用,如技术研究、购买商品或选…

项目管理:项目经理一定要避开这四大误区

项目经理要保质保量按时达成项目目标,需要关注项目的方方面面,要具有很强的沟通协调能力和目标意识。但是项目经理也不免不了失误,管理中的这四大误区,你经历过几个? 误区一:做不该做的事 你是否遇到这种…

剑指offer32Ⅰ:从上到下打印二叉树

题目描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [3,9,20,15,7] 提示: 节…

LeetCode每日一题:2251. 花期内花的数目(2023.9.28 C++)

目录 2251. 花期内花的数目 题目描述: 实现代码与解析: 离散化差分 原理思路: 2251. 花期内花的数目 题目描述: 给你一个下标从 0 开始的二维整数数组 flowers ,其中 flowers[i] [starti, endi] 表示第 i 朵花的…

pytorch函数reshape()和view()的区别及张量连续性

目录 1.view() 2.reshape() 3.引用和副本: 4.区别 5.总结 在PyTorch中,tensor可以使用两种方法来改变其形状:view()和reshape()。这两种方法的作用是相当类似的,但是它们在实现上有一些细微的区别。 1.view() view()方法是…

【C++】C++继承——切片、隐藏、默认成员函数、菱形

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C学习 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C】STL…

行为型设计模式——责任链模式

摘要 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象。 一、责任链模式意图 职责链模式(Chain Of Responsibility) 是一种行为设…

Uniapp实现APP云打包

一. 基础配置 二. APP图标配置 1. 点击浏览 选取图标(注:图片格式为png) 2. 点击自动生成所有图标并替换 三. 点击发行 并选择云打包 四. 去开发者中心获取证书 我这里是已经获取好的,没有获取的话,按照提示获取即可,非常简单…

axios和vite在本地开发环境配置代理的两种方式,五分钟学会

如果你使用vue或者react开发,就得使用axios吧,然后为了解决跨域问题,就得使用vite配置吧,那怎么协调配置它们两个才能正常工作呢? 正常的流程:配置axios的baseURL,然后配置vite的proxy 第一种…

【论文阅读】Directional Connectivity-based Segmentation of Medical Images

目录 摘要介绍方法效果结论 论文:Directional Connectivity-based Segmentation of Medical Images 代码:https://github.com/zyun-y/dconnnet 摘要 出发点:生物标志分割中的解剖学一致性对许多医学图像分析任务至关重要。 之前工作的问题&…

Linux 实训4 正则表达式

将实训4 :正则表达式的完成情况提交实验报告。 创建并输入文本文件 a bcd 1 233 abc123 defrt456 123abc 12568teids abcfrt568 "Open Source" is a good mechan1sm to develop programs. apple is my favorite food. Football game is not …

数据结构----结构--非线性结构--树

数据结构----结构–非线性结构–树 一.树(Tree) 1.树的结构 树是一对多的结构 2.关于树的知识点 1.根节点:树最上面的节点 2.中间节点:树中间的节点 3.叶子节点:树最下面的节点 如下图 4.边:在树中…

弱信号的采样与频谱分析(修订中...)

1.频谱混叠效应 - 波形数据抽样 这是一组经过抽样的数据的频谱,红圈圈出的两条谱线,是我们需要关注的特征谱线。这个信号与右侧的临近信号比较,求频率比值,比值恒定与理论推导相符。再5取1降低采样率后,大致相同的频率…