【问题标题】:Check whether touched Point lies inside given area or not [duplicate]检查触摸点是否位于给定区域内[重复]
【发布时间】:2013-06-24 07:01:32
【问题描述】:

请看下图。

总图像约为 300X300。里面有 1 个菱形形状。我知道它的要点如下

    pointA = new Point(0, 183);
    pointB = new Point(183, 0);
    pointC = new Point(366, 183);
    pointD = new Point(183, 366);

如果我触摸整个图像,我如何检测触摸点是在钻石区域内还是在外面? 我还查看了this 链接,但有些地方不明白。

【问题讨论】:

  • 你解决问题了吗?
  • 还没有...正在寻找完整的解决方案
  • 终于得到了答案。看看stackoverflow.com/questions/14362027/…
  • 感谢所有试图提供帮助的人
  • 请不要在您的标题中添加(已解决)。如果合适,请将答案标记为已接受,或者如果您发现另一个问题解决了您的问题,则将您的问题标记为重复。

标签: java android image touch hittest


【解决方案1】:

从您的Points
创建一个Shape 对象 检查该点是否存在于Shpae
我不确定这个,但它应该和这个类似......

Rectangle rect = new Rectangle();//use your points co-ordinates 
    if (rect.contains(x,y))
     {
       //isinside
     }

【讨论】:

  • 还有rect.contains(your_point)方法可以使用....
  • 我试过这个。我认为它从(0,0)取矩形。但是,在上图中,物体内部是菱形的。所以,它返回错误的结果
【解决方案2】:

您指的是L1 NormManhattan Distance。要测试您的点击点是否在您的钻石内(或小于 183 的 L1 标准,您只需执行以下操作(在伪代码中):

isInside(ClickedPoint)
{
    X=abs(ClickedPoint.x-183);
    Y=abs(Clickedpoint.y-183);

    if (X+Y<=183) return inside
    else return outside
}

很抱歉没有包含真正的 Java 代码,但编写代码应该不会太难。

【讨论】:

  • 由您自己编写代码...但其背后的算法/数学是正确的。
【解决方案3】:

你要做的就是将触摸点和菱形点旋转45度:

public Point rotatePoint(Point pt, Point center)
{
    double cosAngle = Math.cos(45);
    double sinAngle = Math.sin(45);
    double dx = (pt.x-center.x);
    double dy = (pt.y-center.y);
    pt.x = center.x + (int) (dx*cosAngle-dy*sinAngle);
    pt.y = center.y + (int) (dx*sinAngle+dy*cosAngle);
    return pt;
}

从点创建一个矩形:

Point centerPoint = new Point(183,183);
Rect r = new Rect(rotatePoint(pointA, centerPoint).x, rotatePoint(pointA, centerPoint).y, rotatePoint(pointC, centerPoint).x, rotatePoint(pointC, centerPoint).y);

如果它包含该点,则使用测试:

r.contains(rotatePoint(ClickedPoint, centerPoint))

如果点在菱形中,这将返回 true。

【讨论】:

  • 以Point为参数的Rect没有构造函数...
  • 试试Rect r = new Rect(rotatePoint(pointA, centerPoint).x, rotatePoint(pointA, centerPoint).y, rotatePoint(pointC, centerPoint).x, rotatePoint(pointC, centerPoint).y);
  • 反正就是这个概念,将菱形旋转成正方形,然后测试旋转的点是否在正方形中。
  • 它不工作:(无论如何,谢谢你的回复
  • 本例中sincos 的角度以度为单位,而Math 期望它们以弧度为单位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-12
  • 2013-01-17
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多