~repos /gdx-studio
git clone https://pyrossh.dev/repos/gdx-studio.git
An IDE for creating Games using libgdx and Java supported on all platforms Android, iOS, Desktop
src_libs/com/github/axet/lookup/common/RectK.java
package com.github.axet.lookup.common;
/** * Haar like Feature rect with it's value k. * * @author axet * */public class RectK implements Comparable<RectK> { public int x1; public int y1; public int x2; public int y2;
// base rect cx size public int cxBase; // base rect cy size public int cyBase;
// sum of the pixels in the area public double k;
public RectK(int x, int y) { x1 = x; y1 = y; x2 = x; y2 = y; }
public RectK(int x1, int y1, int x2, int y2, int cx, int cy) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2;
this.cxBase = cx; this.cyBase = cy; }
public int getWidth() { return x2 - x1 + 1; }
public int getHeight() { return y2 - y1 + 1; }
public int size() { return (x2 - x1 + 1) * (y2 - y1 + 1); }
public boolean equal(RectK k) { return x1 == k.x1 && x2 == k.x2 && y1 == k.y1 && y2 == k.y2; }
@Override public int compareTo(RectK k) { int r = 0;
if (r == 0) r = new Integer(x1).compareTo(k.x1);
if (r == 0) r = new Integer(y1).compareTo(k.y1);
if (r == 0) r = new Integer(x2).compareTo(k.x2);
if (r == 0) r = new Integer(y2).compareTo(k.y2);
return r; }
public RectK[] devide() { int w = getWidth(); int h = getHeight(); if (w > h) { w = w / 2;
RectK r1 = new RectK(x1, y1, x1 + w - 1, y1 + h - 1, cxBase, cyBase);
int r2x1 = r1.x2 + 1; int r2y1 = r1.y1; int r2cx = getWidth() - r1.getWidth(); int r2cy = getHeight();
RectK r2 = new RectK(r2x1, r2y1, r2x1 + r2cx - 1, r2y1 + r2cy - 1, cxBase, cyBase);
if (r1.getWidth() <= 0 || r1.getHeight() <= 0) throw null; if (r2.getWidth() <= 0 || r2.getHeight() <= 0) throw null;
return new RectK[] { r1, r2 }; } else { h = h / 2;
RectK r1 = new RectK(x1, y1, x1 + w - 1, y1 + h - 1, cxBase, cyBase);
int r2x1 = r1.x1; int r2y1 = r1.y2 + 1; int r2cx = getWidth(); int r2cy = getHeight() - r1.getHeight();
RectK r2 = new RectK(r2x1, r2y1, r2x1 + r2cx - 1, r2y1 + r2cy - 1, cxBase, cyBase);
if (r1.getWidth() <= 0 || r1.getHeight() <= 0) return null; if (r2.getWidth() <= 0 || r2.getHeight() <= 0) throw null;
return new RectK[] { r1, r2 }; } }
public Feature getFeature() { SArray s = new SArray(cxBase, cyBase);
int c = 0;
for (int x = 0; x < s.cx; x++) { for (int y = 0; y < s.cy; y++) { boolean test = x >= x1 && x <= x2 && y >= y1 && y <= y2; int v = test ? 1 : 0; s.s(x, y, v);
c += v; } }
// for debug purpose if (c == 0) throw new RuntimeException("empty feature");
return new Feature(s); }}