希望这是一个正确的问题。
背景:我一直在玩osu!最近很多并决定基于我的鼠标(实际上是平板电脑,但让它保持操作系统认为的运动)运动创建可视化。决定为Java拍摄,因为有一个really cool guy who did a library for global mouse events使整个事情成为一个5级项目。
现在情况:我有一个简单的GUI,允许我开始和停止录制,重置存储的运动数据,显示调试信息并退出。一切正常 - 但我现在如何处理我的数据呢?
我的主数据集基本上是以下类的实例的ArrayList:
package com.gmail.zkfreddit.mousetracker;
import de.ksquared.system.mouse.MouseEvent;
public class MouseMotionData {
public final long time;
public final int x;
public final int y;
public MouseMotionData(MouseEvent e) {
time = System.nanoTime();
x = e.getX();
y = e.getY();
}
@Override
public String toString() {
return "MouseMotionData{time=" + time + ",x=" + x + ",y=" + y + "}";
}
}
但是,我对如何可视化这些数据毫无头绪。 I tried drawing lines,但它看起来更像是一个5岁的画画......
(如果你对中间的圈子感兴趣,osu有一个叫做“微调器”的游戏元素 - 应该解释一切;)。)
我还想过做一个热图 - 创建了我的屏幕像素尺寸的双重数组,并试图用表示热量的值填充它,但由于鼠标事件的处理方式,这会生成点而不是线。考虑到每个可视化大约有50000个点并且基于这些线生成热量数据,填充线条似乎是标准台式PC无法处理的巨大任务。
有什么建议吗?
答案 0 :(得分:0)
这是我的想法。它在线性代数上有点沉重,但我想结果是信息丰富且视觉上令人愉悦:
将样品分离成n个细胞的网格,每个细胞可能为20x20px。 将 a(i,j)定义为鼠标从单元格 i 直接移动到单元格 j 的次数。删除 j 的所有单元格 a(i)(j)= 0 所有 i (将它们涂成黑色)。然后将 x(j)设置为所有 x(i)的平均值,其中 a(i)(j)不为零。这将为您提供一个(大)同质线性方程组,确定所有 x 的值。计算一些非常数解,并将值映射到各个单元的颜色色调。最后,你可能想要添加一些高斯模糊。