echarts 实现3D饼图

2023-10-27

2023.6.30今天我学习了如何使用echarts渲染一个3d的饼图,效果如下:

相关代码如下:

<template>
   <div  ref="pie3d"/>
</template>
<script>
export default {
  data() {
    return {
optionData:[
    {
        "code": "3",
        "name": "病区四",
        "cws": 80,
        "zcs": 20,
        "zcl": "25%",
        "value": 80,
        "startRatio": 0,
        "endRatio": 0.34782608695652173
    },
    {
        "code": "0",
        "name": "病区一",
        "cws": 60,
        "zcs": 30,
        "zcl": "50%",
        "value": 60,
        "startRatio": 0.34782608695652173,
        "endRatio": 0.6086956521739131
    },
    {
        "code": "2",
        "name": "病区三",
        "cws": 50,
        "zcs": 20,
        "zcl": "40%",
        "value": 50,
        "startRatio": 0.6086956521739131,
        "endRatio": 0.8260869565217391
    },
    {
        "code": "1",
        "name": "病区二",
        "cws": 40,
        "zcs": 30,
        "zcl": "75%",
        "value": 40,
        "startRatio": 0.8260869565217391,
        "endRatio": 1
    }
]
    }
  },
   mounted() {
    this.myChart = this.$echarts.init(this.$refs.pie3d);
    this.init()
  },
 methods: {
    //初始化构建
    init() {
      // 传入数据生成 option ; getPie3D(数据,透明的空心占比(调节中间空心范围的0就是普通饼1就很镂空))
      this.option = this.getPie3D(this.optionData, 0.85);
      //将配置项设置进去
      this.myChart.setOption(this.option);
      //鼠标移动上去特效效果
      this.bindListen(this.myChart);
    },
    // 监听鼠标事件,实现饼图选中效果(单选),近似实现高亮(放大)效果。
    bindListen(myChart) {
      let that = this;
      let selectedIndex = '';
      let hoveredIndex = '';
      // 监听点击事件,实现选中效果(单选)
      myChart.on('click', function (params) {
        // 从 option.series 中读取重新渲染扇形所需的参数,将是否选中取反。
        let isSelected = !that.option.series[params.seriesIndex].pieStatus.selected;
        let isHovered = that.option.series[params.seriesIndex].pieStatus.hovered;
        let k = that.option.series[params.seriesIndex].pieStatus.k;
        let startRatio = that.option.series[params.seriesIndex].pieData.startRatio;
        let endRatio = that.option.series[params.seriesIndex].pieData.endRatio;
        // 如果之前选中过其他扇形,将其取消选中(对 option 更新)
        if (selectedIndex !== '' && selectedIndex !== params.seriesIndex) {
          that.option.series[selectedIndex].parametricEquation = that.getParametricEquation(that.option.series[
              selectedIndex].pieData
              .startRatio, that.option.series[selectedIndex].pieData.endRatio, false, false, k, that.option.series[
              selectedIndex].pieData
              .value);
          that.option.series[selectedIndex].pieStatus.selected = false;
        }
        // 对当前点击的扇形,执行选中/取消选中操作(对 option 更新)
        that.option.series[params.seriesIndex].parametricEquation = that.getParametricEquation(startRatio, endRatio,
            isSelected,
            isHovered, k, that.option.series[params.seriesIndex].pieData.value);
        that.option.series[params.seriesIndex].pieStatus.selected = isSelected;
        // 如果本次是选中操作,记录上次选中的扇形对应的系列号 seriesIndex
        isSelected ? selectedIndex = params.seriesIndex : null;
        // 使用更新后的 option,渲染图表
        myChart.setOption(that.option);
      });
      // 监听 mouseover,近似实现高亮(放大)效果
      myChart.on('mouseover', function (params) {
        // 准备重新渲染扇形所需的参数
        let isSelected;
        let isHovered;
        let startRatio;
        let endRatio;
        let k;
        // 如果触发 mouseover 的扇形当前已高亮,则不做操作
        if (hoveredIndex === params.seriesIndex) {
          return;
          // 否则进行高亮及必要的取消高亮操作
        } else {
          // 如果当前有高亮的扇形,取消其高亮状态(对 option 更新)
          if (hoveredIndex !== '') {
            // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 false。
            isSelected = that.option.series[hoveredIndex].pieStatus.selected;
            isHovered = false;
            startRatio = that.option.series[hoveredIndex].pieData.startRatio;
            endRatio = that.option.series[hoveredIndex].pieData.endRatio;
            k = that.option.series[hoveredIndex].pieStatus.k;
            // 对当前点击的扇形,执行取消高亮操作(对 option 更新)
            that.option.series[hoveredIndex].parametricEquation = that.getParametricEquation(startRatio, endRatio,
                isSelected,
                isHovered, k, that.option.series[hoveredIndex].pieData.value);
            that.option.series[hoveredIndex].pieStatus.hovered = isHovered;
            // 将此前记录的上次选中的扇形对应的系列号 seriesIndex 清空
            hoveredIndex = '';
          }
          // 如果触发 mouseover 的扇形不是透明圆环,将其高亮(对 option 更新)
          if (params.seriesName !== 'mouseoutSeries' && params.seriesName !== 'pie2d') {
            // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 true。
            isSelected = that.option.series[params.seriesIndex].pieStatus.selected;
            isHovered = true;
            startRatio = that.option.series[params.seriesIndex].pieData.startRatio;
            endRatio = that.option.series[params.seriesIndex].pieData.endRatio;
            k = that.option.series[params.seriesIndex].pieStatus.k;
            // 对当前点击的扇形,执行高亮操作(对 option 更新)
            that.option.series[params.seriesIndex].parametricEquation = that.getParametricEquation(startRatio, endRatio,
                isSelected, isHovered, k, that.option.series[params.seriesIndex].pieData.value + 5);
            that.option.series[params.seriesIndex].pieStatus.hovered = isHovered;
            // 记录上次高亮的扇形对应的系列号 seriesIndex
            hoveredIndex = params.seriesIndex;
          }
          // 使用更新后的 option,渲染图表
          myChart.setOption(that.option);
        }
      });
      // 修正取消高亮失败的 bug
      myChart.on('globalout', function () {
        // 准备重新渲染扇形所需的参数
        let isSelected;
        let isHovered;
        let startRatio;
        let endRatio;
        let k;
        if (hoveredIndex !== '') {
          // 从 option.series 中读取重新渲染扇形所需的参数,将是否高亮设置为 true。
          isSelected = that.option.series[hoveredIndex].pieStatus.selected;
          isHovered = false;
          k = that.option.series[hoveredIndex].pieStatus.k;
          startRatio = that.option.series[hoveredIndex].pieData.startRatio;
          endRatio = that.option.series[hoveredIndex].pieData.endRatio;
          // 对当前点击的扇形,执行取消高亮操作(对 option 更新)
          that.option.series[hoveredIndex].parametricEquation = that.getParametricEquation(startRatio, endRatio,
              isSelected,
              isHovered, k, that.option.series[hoveredIndex].pieData.value);
          that.option.series[hoveredIndex].pieStatus.hovered = isHovered;
          // 将此前记录的上次选中的扇形对应的系列号 seriesIndex 清空
          hoveredIndex = '';
        }
        // 使用更新后的 option,渲染图表
        myChart.setOption(that.option);
      });
    },
    getPie3D(pieData, internalDiameterRatio) {
      let that = this;
      let series = [];
      let sumValue = 0;
      let startValue = 0;
      let endValue = 0;
      let legendData = [];
      let legendBfb = [];
      let k = 1 - internalDiameterRatio;
      pieData.sort((a, b) => {
        return (b.value - a.value);
      });
      // 为每一个饼图数据,生成一个 series-surface(参数曲面) 配置
      for (let i = 0; i < pieData.length; i++) {
        sumValue += pieData[i].value;
        let seriesItem = {
          //系统名称
          name: typeof pieData[i].name === 'undefined' ? `series${i}` : pieData[i].name,
          type: 'surface',
          //是否为参数曲面(是)
          parametric: true,
          //曲面图网格线(否)上面一根一根的
          wireframe: {
            show: false
          },
          pieData: pieData[i],
          pieStatus: {
            selected: false,
            hovered: false,
            k: k
          },
        };
        //曲面的颜色、不透明度等样式。
        if (typeof pieData[i].itemStyle != 'undefined') {
          let itemStyle = {};
          typeof pieData[i].itemStyle.color != 'undefined' ? itemStyle.color = pieData[i].itemStyle.color : null;
          typeof pieData[i].itemStyle.opacity != 'undefined' ? itemStyle.opacity = pieData[i].itemStyle.opacity : null;
          seriesItem.itemStyle = itemStyle;
        }
        series.push(seriesItem);
      }
      // 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
      // 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
      legendData = [];
      legendBfb = [];
      for (let i = 0; i < series.length; i++) {
        endValue = startValue + series[i].pieData.value;
        series[i].pieData.startRatio = startValue / sumValue;
        series[i].pieData.endRatio = endValue / sumValue;
        series[i].parametricEquation = this.getParametricEquation(series[i].pieData.startRatio, series[i].pieData.endRatio,
            false, false, k, series[i].pieData.value);
        startValue = endValue;
        let bfb = that.fomatFloat(series[i].pieData.value / sumValue, 4);
        legendData.push({
          name: series[i].name,
          value: bfb
        });
        legendBfb.push({
          name: series[i].name,
          value: bfb
        });
      }
      //(第二个参数可以设置你这个环形的高低程度)
      let boxHeight = this.getHeight3D(series, 15);//通过传参设定3d饼/环的高度
      // 准备待返回的配置项,把准备好的 legendData、series 传入。
      let option = {
        //图例组件
        legend: {
          data: legendData,
          //图例列表的布局朝向。
          orient: 'horizontal',
          left: '0%',
          //图例文字每项之间的间隔
          itemGap: 10,
          textStyle: {
            color: '#A1E2FF',
            fontSize: '0.5rem',
          },
          show: true,
          icon: "circle",
          //格式化图例文本(我是数值什么显示什么)
          // formatter: function (name) {
          //   var target;
          //   for (var i = 0, l = pieData.length; i < l; i++) {
          //     if (pieData[i].name == name) {
          //       target = pieData[i].value;
          //     }
          //   }
          //   return `${name}: ${target}`;
          // }
          // 这个可以显示百分比那种(可以根据你想要的来配置)
          //   formatter: function(param) {
          //       let item = legendBfb.filter(item => item.name == param)[0];
          //       let bfs = that.fomatFloat(item.value * 100, 2) + "%";
          //       console.log(item.name)
          //       return `${item.name} :${bfs}`;
          //   }
        },
        //移动上去提示的文本内容
        tooltip: {
          formatter: params => {
            if (params.seriesName !== 'mouseoutSeries' && params.seriesName !== 'pie2d') {
              let bfb = ((option.series[params.seriesIndex].pieData.endRatio - option.series[params.seriesIndex].pieData.startRatio) *
                  100).toFixed(2);
              return `${params.seriesName}<br/>` +
                  `<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color};"></span>` +
                  `${bfb}`;
            }
          }
        },
        //这个可以变形
        xAxis3D: {
          min: -1,
          max: 1
        },
        yAxis3D: {
          min: -1,
          max: 1
        },
        zAxis3D: {
          min: -1,
          max: 1
        },
        //此处是修改样式的重点
        grid3D: {
          show: false,
          boxHeight: boxHeight, //圆环的高度
          //这是饼图的位置
          top: '15%',
          viewControl: { //3d效果可以放大、旋转等,请自己去查看官方配置
            alpha: 35, //角度(这个很重要 调节角度的)
            distance: 165,//调整视角到主体的距离,类似调整zoom(这是整体大小)
            rotateSensitivity: 1, //设置为0无法旋转
            zoomSensitivity: 0, //设置为0无法缩放
            panSensitivity: 0, //设置为0无法平移
            autoRotate: true //自动旋转
          }
        },
        series: series
      };
      return option;
    },
    getHeight3D(series, height) {
      series.sort((a, b) => {
        return (b.pieData.value - a.pieData.value);
      })
      return height * 25 / series[0].pieData.value;
    },
    getParametricEquation(startRatio, endRatio, isSelected, isHovered, k, h) {
      // 计算
      let midRatio = (startRatio + endRatio) / 2;
      let startRadian = startRatio * Math.PI * 2;
      let endRadian = endRatio * Math.PI * 2;
      let midRadian = midRatio * Math.PI * 2;
      // 如果只有一个扇形,则不实现选中效果。
      if (startRatio === 0 && endRatio === 1) {
        isSelected = false;
      }
      // 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
      k = typeof k !== 'undefined' ? k : 1 / 3;
      // 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
      let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
      let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
      // 计算高亮效果的放大比例(未高亮,则比例为 1)
      let hoverRate = isHovered ? 1.05 : 1;
      // 返回曲面参数方程
      return {
        u: {
          min: -Math.PI,
          max: Math.PI * 3,
          step: Math.PI / 32
        },
        v: {
          min: 0,
          max: Math.PI * 2,
          step: Math.PI / 20
        },
        x: function (u, v) {
          if (u < startRadian) {
            return offsetX + Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate;
          }
          if (u > endRadian) {
            return offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate;
          }
          return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate;
        },
        y: function (u, v) {
          if (u < startRadian) {
            return offsetY + Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate;
          }
          if (u > endRadian) {
            return offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate;
          }
          return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate;
        },
        z: function (u, v) {
          if (u < -Math.PI * 0.5) {
            return Math.sin(u);
          }
          if (u > Math.PI * 2.5) {
            return Math.sin(u) * h * .1;
          }
          return Math.sin(v) > 0 ? 1 * h * .1 : -1;
        }
      };
    },
    fomatFloat(num, n) {
      var f = parseFloat(num);
      if (isNaN(f)) {
        return false;
      }
      f = Math.round(num * Math.pow(10, n)) / Math.pow(10, n); // n 幂
      var s = f.toString();
      var rs = s.indexOf('.');
      //判定如果是整数,增加小数点再补0
      if (rs < 0) {
        rs = s.length;
        s += '.';
      }
      while (s.length <= rs + n) {
        s += '0';
      }
      return s;
    },
  },
</script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

echarts 实现3D饼图 的相关文章

  • 用于平滑开放 3D 网格边缘的算法

    我有一个 3D 网格 它代表一个具有一些粗糙边界的表面 我想对其进行平滑处理 我使用半边数据结构来存储几何图形 因此我可以轻松地迭代边界边 顶点和面 我还可以使用点积和叉积轻松确定给定的一对边是否是凸 凹的 平滑边缘的最佳方法是什么 使它们
  • 实现3d索贝尔算子

    我目前正在研究从包含体素的 MRI 数据量中去除不均匀性 我想在这些体积上应用索贝尔运算符来找到梯度 我熟悉二维索贝尔掩模和二维图像的邻域 索贝尔面具 1 2 1 0 0 0 1 2 1 1 0 1 2 0 2 1 0 1 x y 的邻域
  • 从绘图 3d 图中抓取相机位置

    我正在绘制 3D 图形并想要调整相机位置 对我来说最好的方法是使用查看器 根据需要缩放和旋转场景 然后以 JSON 形式获取相机位置并将其放入我的脚本中 该脚本生成图片以默认实现相同的位置 根据这条推文 https twitter com
  • 如何旋转 3D 散点图

    下面的代码使用 scatterplot3d 函数来运行高度 重量和体积的 3D 散点图 其中点是 1 6 之间的类值 角度目前为 45 度 我知道我可以通过改变角度来倾斜绘图 我应该使用什么代码将绘图向左或向右旋转 以便我可以提供绘图的多个
  • 使用 glFrustum 进行离轴投影

    我正在尝试使用 OpenGL 对场景进行离轴投影 并且我阅读了该文档罗伯特 库伊马的离轴投影 http csc lsu edu kooima pdfs gen perspective pdf现在对实际需要做什么有了更好的了解 但仍然有一些部
  • 如何计算逆运动学[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想知道如何使用逆运动学计算旋转角度 我计划将其用于实时 3D 动画 有人知道一些详细介绍具体解决方案的好文献吗 以下资源调查了逆运动学问题的一些流行
  • 3d 表面的凸包算法 z = f(x, y)

    我有一个以一组三元组 x i y i z i 形式给出的 3D 表面 其中 x i 和 y i 大致位于网格上 并且每个 x i y i 都有一个关联的 z i 值 典型的网格是20x20 我需要在给定的公差范围内找到哪些点属于曲面的凸包
  • 求 3d 中 2 个任意立方体的交集

    所以 我想找出一个函数 可以让您确定两个任意旋转和大小的立方体是否相交 如果立方体的旋转不是任意的 而是锁定到特定的轴 则相交很简单 您可以通过检查它们的边界来检查它们是否在所有三个维度上相交 以查看它们在所有三个维度上是否相交或在彼此之内
  • 将球体上的 3d 点转换为 UV 坐标

    我在球体上有一个 3d 点 想要将其转换为球体纹理上的 UV 点 有人可以指出正确的方向吗 我可以采用纯数学解决方案 Edit 我目前有这个 它不会返回正确的 UV 坐标 p 是球体上的 3d 点 mesh position 是球体的位置
  • 在 Unity 3D 中使用触摸输入在地形上移动相机

    我是 Unity 新手 我正在尝试弄清楚如何使用触摸输入在地图 地形上移动相机 摄像机将以 90 0 0 的旋转角度俯视地形 地形位于第 8 层 我用键盘移动它没有问题 现在我尝试移动到触摸 如果你想在 iOS 上保持预期的使用情况 那就非
  • 给定 3D 空间中的一条线,如何找到从它到一点的角度?

    我在 3D 空间中有两组点 我想画一条穿过两组点的中心的线 然后找到从该线到每个点的角度 从那里开始 我将根据两个角度的接近程度来确定两组中的匹配点 我知道如何找到每组点的中心 只需将它们平均在一起 并且我知道如何将它们匹配 甚至考虑到它们
  • 如何在SceneKit中实现逼真的景深效果?

    我正在尝试渲染具有真实景深效果的帧 我已经尝试过景深属性camera节点 但它不会产生可用的结果 是否可以切换到景深效果的最大渲染质量 性能不是一个因素 我只需要渲染一帧 用户可以等待它 SceneKit 中逼真的景深效果 在SceneKi
  • 可点击的精灵标签?

    我一直在玩精灵文本标签 更具体地说是这个例子 http stemkoski github io Three js Sprite Text Labels html http stemkoski github io Three js Sprit
  • OpenGL Z 偏置(多边形偏移)限制

    我有两个共面的多边形 我尝试做 glEnable GL POLYGON OFFSET FILL glPolygonOffset 0 1 并期望其中一个明显 位于 另一个之上 这种情况直到大约 70 75 个单位之外 近剪裁平面为 1 远剪裁
  • 3D 数学:根据“向上”和“向上”正交向量计算倾斜(滚动)角度

    我希望这是提出这个问题的正确位置和这个一样 https stackoverflow com questions 3035590 bank angle from up vector and look at vector 但表示为纯数学而不是图
  • 如何创建热图来说明控制发散调色板中心颜色位置的网格差异?

    我有两个人脸 3D 网格 我希望使用热图来说明差异 我想使用红蓝发散色阶 我的数据可以查到here https github com Patricklv How to create heatmap illustraing 3D mesh d
  • 简单模式7公式/例子?

    我最近发现了利用 SNES 模式 7 的伪 3D 效果 并想尝试在 Godot 引擎中复制它 我尝试在网上查找 但所有内容要么以我无法理解的方式解释 要么以我不知道的编程语言解释 我还需要学习如何旋转该区域 并将精灵作为角色或敌人放入 但我
  • DirectX::SpriteFont/SpriteBatch 阻止 3D 场景绘制

    我使用时遇到问题DirectX SpriteFont DirectX SpriteBatch 来自 DirectXTK 与此处讨论的问题完全相同 使用 SpriteFont 类绘制文本时出现问题 https stackoverflow co
  • 无法使用 vcglib 简化 3D 模型,断言“0”失败

    I used vcglib https github com cnr isti vclab vcglib简化 3D 模型文件 我使用了 master a8e87662 git 存储库 我运行示例 trimesh clustering htt
  • 如何使用 matplotlib 将 3d 数据单位转换为显示单位?

    这可能有点疯狂 但我正在尝试使用 matplotlib v1 1 0 创建 3d 散点图的可点击图像图 我已经阅读了如何对二维图进行操作 参见这个博客 http hackmap blogspot com 2008 06 pylab matp

随机推荐

  • NeRF与三维重建专栏(三)nerf_pl源码部分解读与colmap、cuda算子使用

    前言 上一章中我们介绍了NeRF原理 传统体渲染方法以及两者之间的联系 本章中我们将讲解colmap的安装以及使用 部分nerf pl源码 同时在开发过程中 由于部分操作python torch不支持 我们需要自己造轮子 且在后续的专栏中我
  • tdr 定位公式_TDR在农业上的应用

    TDR 摘要 由于农业科技的发展 在很多方面都实现的自动化控制农业生产 而土壤含水量也成为农业生产中用于土壤的一大要素 采用时域反射技术可以快速的测出土壤的容积含水量 为农业生产上做出很大的贡献 引言 土壤水分是作物生长的要素之一 对于作物
  • 【Qt串口调试助手】1.5 - 发送/接收字节数量统计

    对发送 接收的字节数目计数 显示到底部状态栏中 GitHub源码 Qt串口调试助手下载 接收字节数计数 1 在 mainwindow h文件中创建 收发数属性 再创建两个 标签指针 用于显示收发数目 2 mainwindow c 构造函数中
  • 【学习笔记】李宏毅2020ML&DL课程 13_1 Unsupervised Learning

    Clustering 选择适当的cluster 有比较empirical的方法 最常用的方法K means 假设要把X分成K个clusters 找center 要K个clusters就需要K个center 可以随即找K个vector作为K个
  • 【elementplus】body使用zoom导致el-dropdown组件的下拉菜单错位的解决方案

    问题原因 百分百是zoom导致的 百分百不建议项目使用zoom做适配 对elementplus的影响很大 反而element没有这些问题 解决方法 Ele3 的 el dropdown 组件是按照滚动容器做的改变上下展开 dropdown有
  • resultMap实现一对一,一对多,多对多的查询

    第一种 resultMap实现一对一的查询 1 1 1 使用resultMap映射的思路 使用resultMap将查询结果中的订单信息映射到Orders对象中 在orders类中添加User属性 将关联查询出来的用户信息映射到orders对
  • dubbo处理自定义异常问题

    最近在项目上遇到一个有关dubbo的问题 项目分为两层 下层是一些基础服务 上层是业务服务调用下层的基础服务 上层服务的有一个全局的异常拦截器来拦截异常 ControllerAdvice Slf4j public class Excepti
  • ModuleNotFoundError: No module named '_tkinter'

    目前添加上面两句话后没有报错 具体原因不知道
  • VS Code统计代码、注释、空格行数插件 统计前端代码 VUE代码

    VS Code Counter是一款统计代码 注释 空格行数插件 你可以统计单个文件 文件夹或者是工作空间 网址引用 http www duocaichajian com plugin 63 html 首先在插件市场搜索并安装VS Code
  • 微服务基本概念汇总

    1 什么是微服务 单个轻量级服务一般为一个单独微服务 微服务讲究的是 专注某个功能的实现 比如登录系统只专注于用户登录方面功能的实现 讲究的是职责单一 开箱即用 可以独立运行 微服务架构系统是一个分布式的系统 按照业务进行划分服务单元模块
  • Dynamics CRM 自动生成实体关系图(ER Model)

    有时候业务需要查看CRM实体与实体之间的关系 但是会发现在解决方案里面查看会很慢 不能很清楚的展现出来 这时候我们可以使用SDK里面的一个解决方案 可以自动生成关系图 首先打开我们的解决方案SDK SampleCode CS Metadat
  • MySQL数据库总结 之 约束(restraint) & 外键约束

    前三篇关于MySQL的博客 地址如下 1 MySQL数据库 SQL语言命令总结 数据类型 运算符和聚合函数汇总 Flying Bulldog的博客 CSDN博客 2 从0到1 关于MySQL的数据库和表 Flying Bulldog的博客
  • 深度学习相关VO梳理

    相关论文 基于学习的VO 相关 DeepVO Towards End to End Visual Odometry with Deep Recurrent Convolutional Neural Networks ICRA 2017 Ta
  • 服务器安装飞桨排雷

    服务器安装飞桨排雷 前言 确保服务器中已经安装完成 cudnn 组件 使用 nvidia smi 指令确定自己服务器显卡的 CUDA版本 然后到飞桨官网上看下载对应版本的指令 conda 创建新的虚拟环境 并配置 Jupyter 新内核 我
  • hadoop的shell命令操作

    1 文件上传 put root mini3 echo duanchangrenzaitianya gt cangmumayi avi 将cangmumayi avi上传到hdfs文件系统的根目录下 root mini3 hadoop fs
  • MCU做Machine Learning识别技术

    刚刚过去的2018年被称为 人工智能元年 2019年人工智能将会有更大的发展 将会有更多的AI项目落地 随着单芯片计算力的不断增长 机器学习 ML 不再是云计算和高性能处理器的专利 边缘计算正在崛起 边缘计算为AI提供了新的可能性 比如实时
  • 在逍遥安卓模拟器上运行android studio项目

    在运行中输入 cmd 打开命令提示符 如下所示 1 进入到逍遥模拟器的安装路径下 如我的安装目录是 D XiAOYaoAnZhuoMoNiQi Microvirt MEmu 输入命令 adb start server 如下所示 2 进入an
  • cmake:message

    日志消息 概要 General messages message
  • 安装 Linux 远程终端工具 -- Xftp

    1 双击运行 2 下一步 双击下载好的Xftp 7安装包 打开安装向导 选择 下一步 3 下一步 请您仔细阅读用户许可协议 同意请勾选 我同意许可证协议中的条款 并选择 下一步 4 下一步 选择程序安装路径 默认在C盘 需要更改请选择 浏览
  • echarts 实现3D饼图

    2023 6 30今天我学习了如何使用echarts渲染一个3d的饼图 效果如下 相关代码如下