看看下面的图片。
总图像约为300X300。里面有1个钻石形状。我知道它的要点如下
pointA = new Point(0, 183);
pointB = new Point(183, 0);
pointC = new Point(366, 183);
pointD = new Point(183, 366);
如果我触摸整个图像,如何检测触摸点是在钻石区域内还是外部? 我也查看了this链接,但无法理解一些观点。
答案 0 :(得分:2)
您所指的是L1 Norm或Manhattan Distance。要测试您的点击点是否在您的钻石内(或者小于L1的标准值183,您需要做的就是执行以下操作(使用伪代码):
isInside(ClickedPoint)
{
X=abs(ClickedPoint.x-183);
Y=abs(Clickedpoint.y-183);
if (X+Y<=183) return inside
else return outside
}
很抱歉不包含真正的Java代码,但这不应该太难编码。
答案 1 :(得分:1)
从Shape
创建Points
个对象
检查Shpae
中是否存在该点
我不确定这个,但它应该与这个相似......
Rectangle rect = new Rectangle();//use your points co-ordinates
if (rect.contains(x,y))
{
//isinside
}
答案 2 :(得分:1)
您需要做的是将触摸点和钻石点旋转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;
}
从点创建一个Rect:
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。