如果有点并且找到特定区域,如何设置区域?

时间:2013-09-28 12:08:40

标签: android android-canvas

我有所有要点画一条线并正确显示画布上的点。但是现在我想在用户触摸时在该存在线上绘制另一条线。我的问题是,如何找到用户触摸该行内部或行外的内容?

1 个答案:

答案 0 :(得分:1)

我有一个建议。

这是一种基于谷歌地图和折线的想法,但我认为也应该很容易适应Canvas 2DLine的情况。

使用此方法计算两个LatLng点之间的距离:

/** distance in meters **/
private float distFrom(double lat1, double lng1, double lat2, double lng2) {
    double earthRadius = 3958.75;
    double dLat = Math.toRadians(lat2 - lat1);
    double dLng = Math.toRadians(lng2 - lng1);
    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
            + Math.cos(Math.toRadians(lat1))
            * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2)
            * Math.sin(dLng / 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double dist = earthRadius * c;

    int meterConversion = 1609;

    return (float) (dist * meterConversion);
}

当用户点击画布时(为简单起见,想象它只有一行):

  • lineLength =点之间的计算距离(线的全长)
  • endToClickLength1 =计算从点击位置到行的端点1的距离
  • endToClickLength2 =计算从行的点击位置到终点2的距离

现在,如果endToClickLength1 + endToClickLength2 = lineLength(+/- acceptedError),则用户单击该行。

当稍微点击一行时,需要使用acceptedError来扩大边界。

对所有绘制的线执行此操作以判断是否已单击其中一行。