数据可视化--实验三:空间可视化

声明:本文优快云作者原创投稿文章,未经许可禁止任何形式的转载,原文链接

概要

  • 学院:计算机科学与技术学院
  • 实验日期:2020-10-13
  • 实验目的: 掌握空间数据可视化工具方法
  • 实验内容:
    • 在3D空间中绘制以下图形:
      • 螺旋曲线(半径为5,每旋转一周z坐标增加π)
      • 二元正态分布曲面
      • 球面(半径为5)

实验过程

本次实验选择编程类工具Echarts

Echarts

​ 在WebStorm中新建nodejs项目,并引入echarts,echarts-gl等必要包。

创建index.html,写入以下内容,作为本次实验样式文件。

<!--Name:   index.html-->
<!--Author: F-->
<!--Time:   2020/10/13 23:10-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据可视化实验三</title>
</head>
<body>
<div id="main" style="width: 1000px;height:1000px;"></div>
</body>
<script type="text/javascript" src='bundle.js/main.js'></script>
</html>
螺旋曲线(半径为5,每旋转一周z坐标增加π)
  • 新建app.js文件。
  • 在app.js文件中引入echarts,echarts-gl等包并编写逻辑代码,代码如下
/**
 * @name        spiralcurve.js
 * @author      F
 * @Time        2020/10/13 23:19
 * @description 绘制螺旋曲线(半径为5,每旋转一周z坐标增加π)
 */
const echarts = require('echarts');
const echartsGL = require('echarts-gl');
// 基于准备好的dom,初始化echarts实例
const myChart = echarts.init(document.getElementById('main'));

// r为螺旋线半径 k为比例因子 k*w为角速度
function spiral(r, k, w) {
    return [r * Math.cos(k * w), r * Math.sin(k * w), k * w]
}

const data = [];
for (let w = 0; w < 30 * Math.PI; w += 0.1)
    data.push(spiral(5, 0.5, w));//构造一个半径为5,每转一周高度增加π的螺旋线
option = {
    grid3D: {},
    xAxis3D: {},
    yAxis3D: {},
    zAxis3D: {max: 60},
    series: [{
        type: 'line3D',
        data: data,
    }]
}
myChart.setOption(option);
  • 执行webpack,然后在浏览器中打开index.html文件,结果如下

在这里插入图片描述

可以看到半径为5,每旋转一周z坐标增加π的螺旋曲线,实验成功。

二元正态分布曲面
  • 在app.js文件中引入echarts,echarts-gl等包并编写逻辑代码,代码如下
/**
 * @name        2D_Gaussian_surface.js
 * @author      F
 * @Time        2020/10/13 23:49
 * @description 绘制二元正态分布曲面
 */
const echarts = require('echarts');
const echartsGL = require('echarts-gl');
// 基于准备好的dom,初始化echarts实例
const myChart = echarts.init(document.getElementById('main'));

function makeGaussian(amplitude, x0, y0, sigmaX, sigmaY) {
    return function (amplitude, x0, y0, sigmaX, sigmaY, x, y) {
        const exponent = -(
            (Math.pow(x - x0, 2) / (2 * Math.pow(sigmaX, 2)))
            + (Math.pow(y - y0, 2) / (2 * Math.pow(sigmaY, 2)))
        );
        return amplitude * Math.pow(Math.E, exponent);
    }.bind(null, amplitude, x0, y0, sigmaX, sigmaY);
}

// 创建一个高斯分布函数
const gaussian = makeGaussian(50, 0, 0, 20, 20);
const data = [];
// 曲面图要求给入的数据是网格形式按顺序分布。
for (let y = -50; y <= 50; y++) {
    for (let x = -50; x <= 50; x++) {
        const z = gaussian(x, y);
        data.push([x, y, z]);
    }
}
option = {
    grid3D: {},
    xAxis3D: {},
    yAxis3D: {},
    zAxis3D: {max: 60},
    series: [{
        type: 'surface',
        data: data
    }]
}
myChart.setOption(option);
  • 执行webpack,然后在浏览器中打开index.html文件,结果如下

在这里插入图片描述

可以看到二元正态分布曲面,实验成功。

球面(半径为5)
  • 在app.js文件中引入echarts,echarts-gl等包并编写逻辑代码,代码如下
/**
 * @name        spherical.js
 * @author      F
 * @Time        2020/10/13 23:29
 * @description 绘制球面(半径为5)
 */
const echarts = require('echarts');
const echartsGL = require('echarts-gl');
// 基于准备好的dom,初始化echarts实例
const myChart = echarts.init(document.getElementById('main'));
option = {
    tooltip: {},
    visualMap: {
        show: false,
        dimension: 2,
        min: -1,
        max: 1,
        inRange: {
            color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
        }
    },
    xAxis3D: {},
    yAxis3D: {},
    zAxis3D: {},
    grid3D: {},
    series: [{
        type: 'surface',
        parametric: true,
        // shading: 'albedo',
        parametricEquation: {
            u: {
                min: -Math.PI,
                max: Math.PI,
                step: Math.PI / 20
            },
            v: {
                min: 0,
                max: Math.PI,
                step: Math.PI / 20
            },
            x: function (u, v) {
                return 5 * Math.sin(v) * Math.sin(u);
            },
            y: function (u, v) {
                return 5 * Math.sin(v) * Math.cos(u);
            },
            z: function (u, v) {
                return 5 * Math.cos(v);
            }
        }
    }]
};
myChart.setOption(option);

  • 执行webpack,然后在浏览器中打开index.html文件,结果如下

在这里插入图片描述

可以看到半径为5的球面,实验成功。

数据可视化–实验三:空间可视化实验完成,三项实验结果均符合要求,实验成功。

Webpack方法

目录下,有如下文件

  • app.js
  • index.html

要先安装webpack,方法不细说。安装好之后,在此目录下,执行

webpack ./app.js -o ./bundle.js

执行结束后,生成一个./bundle.js/main.js文件,这就是我们在最上面index.html中引入的js文件,这时再直接打开index.html文件就可以了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值