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

用echarts在vue2中实现3d饼图

先看效果,再看文章:

一、安装插件

3d的图不仅用到echarts,还用到了echarts-gl,因此都需要安装一下哦~

npm install echarts 
npm install echarts-gl@2.0.9 //可以指定版本,也可不指定

二、在main.js中引入

import * as echarts from "echarts";
import 'echarts-gl';
Vue.prototype.$echarts = echarts;

三、在组件中使用

直接复制粘贴吧,省事

<template><div class="ybjgtzz"><!-- 饼图 --><div class="container"><div class="chartsGl" id="charts"></div><!-- 饼图下面的底座 --><div class="buttomCharts"></div></div></div>
</template><script>
export default {name: "Zysjg",data() {return {optionData: [{name: '工业',//名称value: 19,//值itemStyle: {//颜色 color: 'rgba(3, 62, 209,0.5)'}}, {name: '生活',value: 13,itemStyle: {color: 'rgba(61, 222, 207,0.5)',}}, {name: '农业',value: 15,itemStyle: {color: 'rgba(193, 142, 34,0.3)'}},],option: {}};},mounted() {this.$nextTick(() => {this.init();});},methods: {//初始化构建init() {//构建3d饼状图let myChart = this.$echarts.init(document.getElementById('charts'));// 传入数据生成 option ; getPie3D(数据,透明的空心占比(调节中间空心范围的0就是普通饼1就很镂空))this.option = this.getPie3D(this.optionData, 0.85);//将配置项设置进去myChart.setOption(this.option);//鼠标移动上去特效效果// this.bindListen(myChart);},//配置构建 pieData 饼图数据 internalDiameterRatio:透明的空心占比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},//设置饼图在容器中的位置(目前没发现啥用)center: ['80%', '100%'],radius: '60%',};//曲面的颜色、不透明度等样式。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 = that.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, 20);//通过传参设定3d饼/环的高度// 准备待返回的配置项,把准备好的 legendData、series 传入。let option = {//图例组件legend: {data: legendData,//图例列表的布局朝向。orient: 'horizontal',center: 0,bottom: 0,//图例文字每项之间的间隔itemGap: 15,textStyle: {color: '#A1E2FF',fontSize: '12px'},itemHeight: 10, // 修改icon图形大小itemWidth: 10, // 修改icon图形大小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}`;}}},labelLine: {show: true,lineStyle: {color: '#7BC0CB',},},label: {show: true,position: 'outside',formatter: '{b} \n{c} {d}%',},//这个可以变形xAxis3D: {min: -1,max: 1},yAxis3D: {min: -1,max: 1},zAxis3D: {min: -1,max: 1},//此处是修改样式的重点grid3D: {show: false,boxHeight: boxHeight, //圆环的高度//这是饼图的位置top: '-20.5%',left: '-4%',viewControl: { //3d效果可以放大、旋转等,请自己去查看官方配置alpha: 25, //角度(这个很重要 调节角度的)distance: 160,//调整视角到主体的距离,类似调整zoom(这是整体大小)rotateSensitivity: 0, //设置为0无法旋转zoomSensitivity: 0, //设置为0无法缩放panSensitivity: 0, //设置为0无法平移autoRotate: false //自动旋转}},series: series};return option;},//获取3d丙图的最高扇区的高度getHeight3D(series, height) {series.sort((a, b) => {return (b.pieData.value - a.pieData.value);})return height * 25 / series[0].pieData.value;},// 生成扇形的曲面参数方程,用于 series-surface.parametricEquationgetParametricEquation(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;}};},// 监听鼠标事件,实现饼图选中效果(单选),近似实现高亮(放大)效果。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;// 如果本次是选中操作,记录上次选中的扇形对应的系列号 seriesIndexisSelected ? 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;// 记录上次高亮的扇形对应的系列号 seriesIndexhoveredIndex = params.seriesIndex;}// 使用更新后的 option,渲染图表myChart.setOption(that.option);}});// 修正取消高亮失败的 bugmyChart.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);});},//这是一个自定义计算的方法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('.');//判定如果是整数,增加小数点再补0if (rs < 0) {rs = s.length;s += '.';}while (s.length <= rs + n) {s += '0';}return s;},},// 准备待返回的配置项,把准备好的 legendData、series 传入。
}
</script>
<style lang="scss" scoped>
//饼图(外面的容器)
.container {width: 90%;height: 100%;padding-top: 15px;
}
//饼图的大小
.chartsGl {height: 200px;width: 380px;
}
//饼图底座(我也想给你们底座图片 可是我不知道咋给)
.buttomCharts {background: center top url("../imgs/u111.png") no-repeat;background-size: 100% 100%;height: 95px;width: 204px;margin-top: -141px;margin-left: 21%;
}.ybjgtzz {overflow-y: auto;padding: 10px;height: 250px;box-sizing: border-box;
}
</style>

四、常修改的参数

1、修改3d饼图大小,在大概244行的位置,grid3D的对象里面,修改distance属性,即可调整

值越小,图越大 

 

2、修改3d饼图视角高度,在大概161行的位置,修改函数的第二个参数

 

3、修改3d饼图颜色,直接在data中的optionData里面修改就行了
 4、修改饼图位置,这个常用,也是在grid3D这个属性里面设置,在大概240行的位置

在3d饼图中设置下面这两属性是没用的,所以这里请注意一下,记得去grid3D里面修改他的位置

 

 最后乘上官方文档例子:echarts图表集

相关文章:

用echarts在vue2中实现3d饼图

先看效果&#xff0c;再看文章&#xff1a; 一、安装插件 3d的图不仅用到echarts&#xff0c;还用到了echarts-gl&#xff0c;因此都需要安装一下哦~ npm install echarts npm install echarts-gl2.0.9 //可以指定版本&#xff0c;也可不指定二、在main.js中引入 import * …...

低代码助力软件开发

低代码开发工具正在日益变得强大&#xff0c;它正不断弥合着前后端开发之间的差距。对于后端来说&#xff0c;基于低代码平台开发应用时&#xff0c;完全不用担心前端的打包、部署等问题&#xff0c;也不用学习各种框架&#xff08;Vue、React、Angular等等&#xff09;&#x…...

C嘎嘎之类和对象上

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;掌握类的引用和定义&#xff0c;熟悉类成员函数的…...

Vue 3使用 Iconify 作为图标库与图标离线加载的方法、 Icones 开源在线图标浏览库的使用

之前一直naive-ui搭配使用的是xicons&#xff0c;后来发现Iconify支持的图标合集更多&#xff0c;因此转而使用Iconify。 与FontAwesome不同的是&#xff0c;Iconify配合Icones相当于是一个合集&#xff0c;Iconify提供了快捷引入图标的方式&#xff0c;而Icones是一个大的图标…...

springboot+vue基于Spark的共享单车数据存储系统的设计与实现【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…...

如何使双核心的ESP32开启双核功能同时执行多任务

如何使双核心的ESP32开启双核功能同时执行多任务 简介查看ESP32当前哪一个内核在执行任务双核同时执行任务总结 简介 ESP32-WROOM-32模组内置两个低功耗 Xtensa 32-bit LX6 MCU&#xff0c;两个 CPU 核&#xff08;core 0与core 1&#xff09;可以被单独控制。可以在两个内核上…...

Node.js在Python中的应用实例解析

随着互联网的发展&#xff0c;数据爬取成为了获取信息的重要手段。本文将以豆瓣网为案例&#xff0c;通过技术问答的方式&#xff0c;介绍如何使用Node.js在Python中实现数据爬取&#xff0c;并提供详细的实现代码过程。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境…...

LC-2316. 统计无向图中无法互相到达点对数(DFS、并查集)

2316. 统计无向图中无法互相到达点对数 中等 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相…...

git笔记 - 常用记录

第1阶段 - Git简介 什么是Git及其重要性&#xff1f;基本的Git概念和术语 仓库&#xff08;Repository&#xff09;&#xff1a;也称为 repo&#xff0c;是存储代码和版本历史的地方。它可以是本地仓库&#xff08;在本地计算机上&#xff09;或远程仓库&#xff08;在服务器…...

无纸化办公小程序数据交互、wxs的使用

前言 很多同志们再写小程序的过程中&#xff0c;不知道该怎么发起HTTP请求到后端&#xff0c;在Web环境中发起HTTPS请求是很常见的&#xff0c;但是微信小程序是腾讯内部的产品&#xff0c;不能直接打开一个外部的链接。例如&#xff0c;在微信小程序中不能直接打开www.taobao…...

Python之哈希表-哈希表原理

Python之哈希表-哈希表原理 集合Set 集合&#xff0c;简称集。由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构类型。Python中&#xff0c;它是可变的、无序的、不重复的元素的集合 初始化 set() -> new empty set objectset(iterable) -> new set …...

sql server2014如何添加多个实例 | 以及如何删除多个实例中的单个实例

标题sql server2014如何添加多个实例 前提&#xff08;已安装sql server2014 且已有默认实例MSSQLSERVER&#xff09; 添加新的实例 其实就是根据安装步骤再安装一次&#xff08;区别在过程中说明&#xff09; 双击安装 选择“全新独立安装或添加现有功能” 然后下一步下一…...

C++ 智能指针常用总结

C 智能指针常用总结 文章目录 C 智能指针常用总结1. 写在对前面2. why 智能指针3. what 智能指针3.1 unique_ptr3.2 shared_ptr3.3 weak_ptr 3. how 指针指针3.1 unique_ptr3.1.1 创建3.1.2 成员函数 3.2 shared_ptr3.2.1创建3.2.2 成员对象 3.3 weak_ptr 4. 碎碎念5.参考资料 …...

OracleRAC 安装配置过程中的问题

OS RHAS 3.2 DB 9204 在RAC的安装配置过程中&#xff0c;虽然是严格仔细按照文档来实施&#xff0c;但还是出现不少问题&#xff0c;现整理出来。 现象一 &#xff1a; 在节点一安装数据库的时候出现以下错误 [oraclerac1 dbs]$ sqlplus "/nolog"SQL*Plus: Relea…...

基于战争策略优化的BP神经网络(分类应用) - 附代码

基于战争策略优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于战争策略优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.战争策略优化BP神经网络3.1 BP神经网络参数设置3.2 战争策略算法应用 4.测试结果…...

K8s 概念及组件

K8s 的全称为Kubernetes&#xff0c;是一种开源的容器编排平台&#xff0c;用于自动化部署以及扩展和管理容器化的应用程序&#xff0c;它提供了一种容器编排和管理的方式&#xff0c;可以帮助开发人员更轻松的管理容器化的应用程序&#xff0c;并且提供了一种跨多个主机的自动…...

【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin

我的java的gradle项目经常报错org.gradle .api.plugins .MavenPlugin。报错这个问题是因为依赖起冲突了&#xff0c;我在网上试了很多方法都没有效果&#xff0c;折让小编我很是苦恼&#xff0c;不过还好到最后问题还是解决了。 首先要知道你的项目所使用的gradle版本&#xf…...

计算机网络-计算机网络体系结构-网络层

目录 一、IPV4 IP数据报格式 *IP 数据报分片 *IPV4地址 分类 网络地址转换(NAT) 二、子网划分与子网掩码 *CIDR *超网 协议 ARP协议 DHCP协议 ICMP协议 三、IPV6 格式 IPV4和IPV6区别 地址表示形式 四、路由选择协议 RIP(路由信息协议) OPSF(开发最短路径优…...

60 最长有效括号

最长有效括号 题目描述题解1 DPstack题解2 stack题解3 DP题解4 左右指针 题目描述 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1…...

第17章 MQ(二)

17.11 RabbitMQ如何保证消息的顺序性 难度:★★ 重点:★★★ 白话解析 其实RabbitMQ是一个先进先出的队列,只要消息进入到队列之后那肯定是顺序的,其实这道题问的点就是在消息进队列之前和出队列之后如何保证顺序性。 1、要保证消息进队列的顺序性实际只需要保证生产者只…...

FigmaCN:3分钟让Figma界面变中文,设计师工作效率提升50%

FigmaCN&#xff1a;3分钟让Figma界面变中文&#xff0c;设计师工作效率提升50% 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否曾因Figma的全英文界面而感到困惑&#xff1f;是否…...

VSCode多智能体协同调试实操手册:从零搭建可复现的Agent通信断点系统(含完整launch.json配置模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode多智能体协同调试的核心概念与适用场景 VSCode 多智能体协同调试&#xff08;Multi-Agent Collaborative Debugging&#xff09;是一种面向复杂分布式系统的新型调试范式&#xff0c;它将多个语义…...

C++26 Contracts正式落地:从Clang 19/MSVC 2026 Preview到GCC 14.3,三编译器兼容性避坑清单(附自动契约注入脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C26 Contracts正式落地&#xff1a;从Clang 19/MSVC 2026 Preview到GCC 14.3&#xff0c;三编译器兼容性避坑清单&#xff08;附自动契约注入脚本&#xff09; C26 Contracts 已在 ISO WG21 最新草案中…...

进阶教程:用Ruby实现强化学习和游戏AI开发

进阶教程&#xff1a;用Ruby实现强化学习和游戏AI开发 【免费下载链接】machine-learning-with-ruby Curated list: Resources for machine learning in Ruby 项目地址: https://gitcode.com/gh_mirrors/ma/machine-learning-with-ruby GitHub 加速计划 / ma / machine-…...

从 Cloud Connector 到 abapodbc,把 ABAP On-Premise Remote Source 真正搭起来

这类连接最近在很多混合架构项目里都会出现,业务数据还放在本地部署的 SAP S/4HANA 或其他 ABAP 系统里,分析、联合查询、虚拟化访问却已经放到了 SAP HANA Cloud。到了这个阶段,我们常见的诉求不是把所有数据一股脑搬到云上,而是先把访问链路打通,让 SAP HANA Cloud 以远…...

[特殊字符] JMeter 压测日志指标全解析

一、启动命令 jmeter -n -t aaa.jmx -l result.jtl -e -o reports参数含义: 参数 作用 -n 启用无界面非 GUI 模式运行压测(服务器 / 命令行压测专用,比 GUI 稳定) -t aaa.jmx 指定压测脚本:本次运行的脚本文件名为 aaa.jmx -l result.jtl 把本次所有请求的原始压测数据,…...

从 “工具” 到 “同事”:企业正在进入智能体驱动的数智化跃迁时代

过去几年&#xff0c;人工智能正以不可逆转的态势&#xff0c;深度渗透企业经营管理的每一个环节。从最初辅助写文案、查数据、做分析的效率工具&#xff0c;到如今主动理解目标、联动系统、自主执行、持续迭代的工作伙伴&#xff0c;AI 正在完成一场从 “辅助支撑” 到 “参与…...

JDK异常处理No appropriate protocol

异常展示 javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171) ~[na:1.8.0_292]at sun.security.ssl.ClientHandshakeC…...

XSS‘OR高级功能揭秘:加密算法与payload库深度探索

XSSOR高级功能揭秘&#xff1a;加密算法与payload库深度探索 【免费下载链接】xssor2 XSSOR - Hack with JavaScript. 项目地址: https://gitcode.com/gh_mirrors/xs/xssor2 XSSOR是一款专注于JavaScript安全测试的工具&#xff0c;全称"XSSOR - Hack with JavaScr…...

HTML函数运行慢是硬件问题吗_HTML函数卡顿原因排查技巧【详解】

HTML本身不执行函数&#xff0c;所谓“HTML函数卡顿”实为JavaScript执行慢、CSS渲染阻塞或资源加载拖累&#xff1b;常见于本地打开、Live Server启动或线上访问&#xff0c;需排查JS循环、scroll监听器、未压缩图片等。HTML 里根本没有“函数”在运行浏览器打开 HTML 文件卡顿…...