【问题标题】:How to get mouse position in float or double with exact resolution?如何以精确的分辨率获得浮点或双精度鼠标位置?
【发布时间】:2010-03-10 14:04:26
【问题描述】:

我需要在float或double中获取鼠标点击位置,我该怎么做?在鼠标监听器中,我采取这样的观点,

e.getPoint();

但是 Point 对象的 x 和 y 值是整数,我需要浮点或双精度的位置。 任何帮助将不胜感激。

编辑 我需要精确的分辨率。

【问题讨论】:

  • 您可以根据需要将int 转换为floatdouble。这里没问题。还是您想要光标位置的亚像素分辨率?我不认为你能得到那个。
  • 我需要精确的分辨率。
  • 精确分辨率是返回的整数值。屏幕坐标系是基于整数的,因此不再需要通过使用浮点数来获得“分辨率”。
  • @EEE:“精确分辨率”是什么意思?你的意思是比像素网格更精确?我不知道这是否可能,但也许您可以考虑尝试获取对鼠标设备的原始访问权限。
  • @EEE:你可以在那里画,但你不知道鼠标是否定位在那个点上(至少在纯 Java 中不是)。

标签: java coordinates mouseevent point


【解决方案1】:

getPoint() 为您提供整数值,因为这是指定坐标的精度。见http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Point.html

为什么需要浮点值?

编辑:为了回应您的评论,您需要使用 floor(始终向下舍入)或 round(四舍五入到最接近的 int)之类的函数将绝对位置映射到屏幕像素。该系统没有 0.2 像素或类似的概念。您可以不断截断计算的小数部分,或始终保持精确坐标并根据需要将它们映射到像素。

【讨论】:

  • 我有一些对象的动画,它们的速度、加速度不是固定的,我根据它们的位移在面板中移动这些对象。对象有时需要移动,比如 x 坐标中的 100,2,我需要这个确切的位置。
  • @EEE:用户应该如何以亚像素精度移动鼠标?首先,他没有得到任何反馈来告诉他他是在 10.1 还是 10.2,然后还有一个小问题,即大多数人无论如何都无法进行这种精确运动。如果精度值高于用户的实际精度能力,那是没有意义的。
【解决方案2】:

int 你应该可以毫无问题地转换为doublefloat

double x = e.getPoint().x;
double y = e.getPoint().y;

但是已经有一些方法可以做到这一点:

double x = e.getPoint().getX();
double y = e.getPoint().getY();

我错过了什么吗?

请注意,精度不会更高 - 鼠标只能捕捉到完整像素,因此通常整数是可以的。但如果您需要根据这些值进行计算,浮点表示可能会很有用。

【讨论】:

  • 感谢您的回答,但我需要准确的分辨率。请参阅我对 danben 的回答的评论。
【解决方案3】:

你无法得到比getPoint() 更精确的点,它返回一个仅包含两个整数的 Point 对象。 想要达到什么目的?

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2011-09-14
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多