什么是创建鼠标移动可视化的最丰富的方法?

时间:2014-11-02 22:49:37

标签: java mouseevent mouse visualization heatmap

希望这是一个正确的问题。

背景:我一直在玩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无法处理的巨大任务。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是我的想法。它在线性代数上有点沉重,但我想结果是信息丰富且视觉上令人愉悦:

将样品分离成n个细胞的网格,每个细胞可能为20x20px。 将 a(i,j)定义为鼠标从单元格 i 直接移动到单元格 j 的次数。删除 j 的所有单元格 a(i)(j)= 0 所有 i (将它们涂成黑色)。然后将 x(j)设置为所有 x(i)的平均值,其中 a(i)(j)不为零。这将为您提供一个(大)同质线性方程组,确定所有 x 的值。计算一些非常数解,并将值映射到各个单元的颜色色调。最后,你可能想要添加一些高斯模糊。