php实现五维雷达图,甲贺忍法帖人物数据分析+五维雷达图【个人向】

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

首先庆祝樱花忍法帖顺利开播,在此之前,我们还是回顾了一遍甲贺忍法帖。

虽然这个吧关于人物强度的帖子已经很多了,不过现在我想尝试用另一种分析方式,用数据五维图直观的分析各人物。

1.该数据分析方案参考了北斗神拳、三国志、fatego等资料而制成,共分析术、敏、技、智、魅五个指标,每个指标从低到高分为E、D、C、B、A、EX五个等级,其中各等级之间微小差异会在后面做+或者++补正。

2.指标注解: 术:忍术、特技的强度。 敏:移动速度、反应速度、出招速度。 技:战斗技巧、物理作战能力。 智:智力,谋略。 魅:魅力=人格魅力+颜值(这项可能争议会比较大)。 3.各项指标生成五维雷达图,直观展现各人物的数据。 4.该分析仅代表个人观点,如有不足希望大家指出,共同讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现五维雷达图,您可以使用 CustomPainter 类来自定义绘制五边形的图形。以下是一个示例代码,可以让您开始实现五维雷达图: ```dart import 'dart:math'; import 'package:flutter/material.dart'; class RadarChart extends StatelessWidget { final List<double> data; RadarChart({this.data}); @override Widget build(BuildContext context) { return CustomPaint( painter: RadarPainter(data), child: Container(), ); } } class RadarPainter extends CustomPainter { final List<double> data; final Paint polygonPaint; final Paint linePaint; final Paint textPaint; final double maxValue; RadarPainter(this.data) : polygonPaint = Paint() ..color = Colors.blue.withOpacity(0.3) ..style = PaintingStyle.fill, linePaint = Paint() ..color = Colors.blue ..style = PaintingStyle.stroke ..strokeWidth = 2.0, textPaint = Paint() ..color = Colors.black ..style = PaintingStyle.fill ..textBaseline = TextBaseline.alphabetic ..textAlign = TextAlign.center ..fontSize = 14.0, maxValue = 1.0; @override void paint(Canvas canvas, Size size) { // 计算五边形中心点 Offset center = Offset(size.width / 2, size.height / 2); // 计算五边形半径 double radius = min(size.width, size.height) / 2; // 计算五边形顶点坐标 List<Offset> vertices = List.generate( 5, (i) { double x = center.dx + radius * cos(2 * pi / 5 * i - pi / 2); double y = center.dy + radius * sin(2 * pi / 5 * i - pi / 2); return Offset(x, y); }, ); // 绘制五边形 Path path = Path(); path.moveTo(vertices[0].dx, vertices[0].dy); for (int i = 1; i < 5; i++) { path.lineTo(vertices[i].dx, vertices[i].dy); } path.close(); canvas.drawPath(path, polygonPaint); // 绘制五边形边线 for (int i = 0; i < 5; i++) { canvas.drawLine(vertices[i], vertices[(i + 1) % 5], linePaint); } // 绘制五边形对角线 for (int i = 0; i < 5; i++) { canvas.drawLine(center, vertices[i], linePaint); } // 绘制数据标记点 Path dataPath = Path(); for (int i = 0; i < 5; i++) { double value = data[i] / maxValue; double x = center.dx + radius * value * cos(2 * pi / 5 * i - pi / 2); double y = center.dy + radius * value * sin(2 * pi / 5 * i - pi / 2); if (i == 0) { dataPath.moveTo(x, y); } else { dataPath.lineTo(x, y); } canvas.drawCircle(Offset(x, y), 6.0, linePaint); } dataPath.close(); canvas.drawPath(dataPath, polygonPaint); // 绘制数据标签 for (int i = 0; i < 5; i++) { double value = data[i] / maxValue; double x = center.dx + radius * value * cos(2 * pi / 5 * i - pi / 2); double y = center.dy + radius * value * sin(2 * pi / 5 * i - pi / 2); canvas.drawText( value.toStringAsFixed(1), Offset(x, y + 16.0), textPaint, ); } } @override bool shouldRepaint(CustomPainter oldDelegate) { return true; } } ``` 在上面的示例代码中,我们定义了三个 Paint 对象,一个用于绘制五边形的填充,一个用于绘制五边形的边线和数据标记点的圆圈,还有一个用于绘制数据标签的文本。然后在 RadarPainter 类的 paint 方法中,我们计算五边形的中心点、半径和顶点坐标,并使用这些参数绘制五边形。接着,我们根据传入的数据,计算出每个数据点在五边形中的位置,并使用圆圈标记绘制出来,同时绘制出数据的连线。最后,我们根据位置绘制出数据标签。 要使用 RadarChart 类,只需要在 Widget 树中添加一个 RadarChart 对象,并传入一个包含五个数据点的 List 即可: ```dart RadarChart(data: [0.8, 0.5, 0.6, 0.9, 0.7]) ``` 这将会绘制一个五维雷达图,并将五个数据点分别标记在五边形的顶点处。您可以根据需要修改绘制五边形和数据标记点的样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值