像素级碰撞算法1

boolean isCollisionPolygon(int[] xPoints, int[] yPoints, int posx, int posy) {
    int i, j;
    int y;
    int miny, maxy;
    int x1, y1;
    int x2, y2;
    int ind1, ind2;
    int ints;
    int[] polyInts;
    int nPoints = xPoints.length;
    if (nPoints < 3) {
      return false;
    }
    polyInts = new int[nPoints];
    miny = yPoints[0];
    maxy = yPoints[0];
    for (i = 1; i < nPoints; i++) {
      if (yPoints[i] < miny) {
        miny = yPoints[i];
      }
      else if (yPoints[i] > maxy) {
        maxy = yPoints[i];
      }
    }
    for (y = miny; y <= maxy; y++) {
      ints = 0;
      for (i = 0; i < nPoints; i++) {
        if (i == 0) {
          ind1 = nPoints - 1;
          ind2 = 0;
        }
        else {
          ind1 = i - 1;
          ind2 = i;
        }
        y1 = yPoints[ind1];
        y2 = yPoints[ind2];
        if (y1 < y2) {
          x1 = xPoints[ind1];
          x2 = xPoints[ind2];
        }
        else if (y1 > y2) {
          y2 = yPoints[ind1];
          y1 = yPoints[ind2];
          x2 = xPoints[ind1];
          x1 = xPoints[ind2];
        }
        else {
          continue;
        }
        if ( (y >= y1) && (y < y2)) {
          polyInts[ints++] = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
        }
        else if ( (y == maxy) && (y > y1) && (y <= y2)) {
          polyInts[ints++] = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
        }
      }
      for (i = polyInts.length; --i >= 0; ) {
        for (j = 0; j < i; j++) {
          if (polyInts[j] > polyInts[j + 1]) {
            int T = polyInts[j];
            polyInts[j] = polyInts[j + 1];
            polyInts[j + 1] = T;
          }
        }
      }
      for (i = 0; i < ints; i += 2) {
        if (posy == y) {
          if (posx >= polyInts[i] && posx <= polyInts[i + 1]) {
            return true;
          }
        }
      }
    }
    return false;
  }

 

boolean isCollisionPolygon(int[] xPoints, int[] yPoints, int posx, int posy)
使用方法.
xPoints,是多边形的X坐标,yPoints是Y坐标
posx,posy是那个要检测点的坐标

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值