package com.js.photosdk.operate; import java.util.List; import android.graphics.PointF; import android.util.Log; /** * 判断某个点是否在多边形区域内 * */ public class Lasso { private float[] mPolyX, mPolyY; private int mPolySize; /** * 构造方法 * * @param 集合 * */ 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); } /** * 判断多边形是否包含点 * * @param x * X坐标 * @param y * Y坐标 * @return true */ 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; } }