java - 如何在拖动鼠标时平滑填充椭圆
问题描述
我正在使用 MouseMotion 侦听器向 HashSet 添加形状,然后使用 Graphics2D 填充它们。但是,当我将鼠标移动得太快时,这些点不再形成一条连贯的线。
我试过谷歌搜索,但没有找到相关的答案。
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
//points.add(new Point(e.getX(), e.getY()));
shapes.add(new ShapeInfo(circle, new Point(e.getX(), e.getY()), color));
repaint();
}
});
for(ShapeInfo info : shapes) {
Point location = info.point.getLocation();
g2d.translate(location.x, location.y);
g2d.setColor(info.color);
g2d.fill(info.shape);
g2d.translate(-location.x, -location.y);
}
我希望得到一条由圆圈组成的漂亮、流畅的线条,但最终会得到分散的圆圈。https://imgur.com/a/KLOyPcn <- 这是我在绘画时拖动鼠标过快时发生的情况。
解决方案
您的鼠标以特定频率工作(普通鼠标工作在 100Hz 左右),因此它会在您移动时选择一定数量的点。
如果你在半秒内覆盖 1000 像素(这不是很快),它将选择 50 个点,它们将每 20 个像素间隔。
如果您的圆的半径小于该半径,您将看到一条虚线。
即使使用非常快的鼠标也无法使您获得连续的线条。
如果需要,您可以在点之间画一条线而不是画一个圆,或者在最后一个圆和当前圆之间插入坐标,并在两个圆之间创建其他圆。
推荐阅读
- oracle - 基于列值的行选择
- ios - 使用 CLI 命令或 Ionic 配置将 AdSupport Framework 添加到 Xcode 项目
- maven - 如何设置 Netbeans IDE 以远程调试 Raspberry 上的 Maven JavaFx 项目?
- php - $in 聚合不适用于没有不同值的数组
- c# - 为什么电脑游戏会减慢不相关的 COM 端口?
- html - 避免嵌套的 iframe 被父元视口缩放
- linux - 在 linux 可执行文件中包含 sudo 密码
- css - 无法解释的页边距@页面顶部
- c# - 如何在 WPF 中的 RichTextBox 中获取插入符号/光标位置?
- javascript - 网络音频只播放一次