android中判断一个点是否在一个封闭Path中
2013-08-05 17:18
411 查看
判断一个点是否在一个封闭的Path中,可以将Path理解为点的集合,也就是说Path可以近似看作是一个多边形,问题即转化为判断一个点是否在一个多边形里面。
关于判断点是否在多边形内,http://en.wikipedia.org/wiki/Point_in_polygon有详细描述。
下面的代码描述了一个套索类,该类可以判断一个点是否在用户手指所画的一个套索区域中:
Lasso类中的contains方法即是判断点是否在多边形内,源代码参考自http://stackoverflow.com/a/2922778/1969158。
关于判断点是否在多边形内,http://en.wikipedia.org/wiki/Point_in_polygon有详细描述。
下面的代码描述了一个套索类,该类可以判断一个点是否在用户手指所画的一个套索区域中:
/** * a polygon represents a lasso. * * @author snow * */ public class Lasso { // polygon coordinates private float[] mPolyX, mPolyY; // number of size in polygon private int mPolySize; /** * default constructor * * @param px * polygon coordinates X * @param py * polygon coordinates Y * @param ps * polygon sides count */ public Lasso(float[] px, float[] py, int ps) { this.mPolyX = px; this.mPolyY = py; this.mPolySize = ps; } /** * constructor * * @param pointFs * points list of the lasso */ public Lasso(List<PointF> pointFs) { this.mPolySize = pointFs.size(); this.mPolyX = new float[this.mPolySize]; this.mPolyY = new float[this.mPolySize]; for (int i = 0; i < this.mPolySize; i++) { this.mPolyX[i] = pointFs.get(i).x; this.mPolyY[i] = pointFs.get(i).y; } Log.d("lasso", "lasso size:" + mPolySize); } /** * check if this polygon contains the point. * * @param x * point coordinate X * @param y * point coordinate Y * @return point is in polygon flag */ public boolean contains(float x, float y) { boolean result = false; for (int i = 0, j = mPolySize - 1; i < mPolySize; j = i++) { if ((mPolyY[i] < y && mPolyY[j] >= y) || (mPolyY[j] < y && mPolyY[i] >= y)) { if (mPolyX[i] + (y - mPolyY[i]) / (mPolyY[j] - mPolyY[i]) * (mPolyX[j] - mPolyX[i]) < x) { result = !result; } } } return result; } }当用户手指在屏幕上划动时,可以保存手指划过的点用来实例化Lasso类,也可以在用户手指抬起后通过PathMeasure类来对封闭的Path对象取点,然后实例化Lasso类。
Lasso类中的contains方法即是判断点是否在多边形内,源代码参考自http://stackoverflow.com/a/2922778/1969158。
相关文章推荐
- android中判断一个点是否在一个封闭Path中
- Android 判断一个点是否在封闭的Path内或不规则的图形内
- Android 判断一个字符串是否含有中文
- Android判断一个Service是否运行
- Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?
- Android 中判断一个程序是否为输入法程序
- 【Android】Adroid开发之判断一个自己的apk是否已经签名
- 在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内
- Android 中判断一个程序是否为输入法程序
- android判断一个Service是否存在
- Android判断一个Service是否运行
- Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
- 一个判断点是否在参数方程连续可微的封闭曲线界定的区域之内的好概念
- Android 判断一个字符串是否含有中文
- android&nbsp;判断一个包是否在系统存在
- Android 判断SQLite数据库中是否存在某一个表格
- Android 判断一个Service是否已经运行
- Android判断一个Service是否运行 对服务的判断
- Android 判断一个url是否有效