package interpretacja.gramatyka; import interpretacja.Edge; import interpretacja.Fragment; import interpretacja.Geom; import interpretacja.GrafAdv; import interpretacja.Produkt; import java.util.ArrayList; import java.util.List; public class ZamknietaKrzywa implements GSymbol { class ZamknietaKrzywaKont implements GSymbol { @Override public List akceptuj(Produkt h, GrafAdv g) { List ps = new ArrayList(); if (h.depth() > 30) { return new ArrayList(); } List es = g.E(h.n()); for (Edge e : es) { if (h.czyZawiera(e)) { Edge atrStart = (Edge)h.atr("start"); if (atrStart != e) { continue; } Produkt np = new Produkt(e, h); ps.add(np); } else { double kat = Geom.greater(e.kat(), (Double)h.atr("kat")); if (((kat <= 0)||(kat >= 60))&&(e.len() >= 3)) { continue; } Produkt np = new Produkt(e, h); np.dodajAtr("kat", e.kat()); ps.addAll(this.akceptuj(np, g)); } } return ps; } @Override public Fragment ocr(Produkt p, GrafAdv g) { // TODO Auto-generated method stub return null; } } private ZamknietaKrzywaKont kont = new ZamknietaKrzywaKont(); @Override public List akceptuj(Produkt h, GrafAdv g) { List ps = new ArrayList(); List es = g.E(h.n()); for (Edge e : es) { if (h.czyZawiera(e)) { continue; } //System.out.println(h.printDepth() + e.toString() + " Kat = " + e.kat()); Produkt np = new Produkt(e, h); np.dodajAtr("start", e); np.dodajAtr("kat", e.kat()); ps.addAll(this.kont.akceptuj(np, g)); } return ps; } @Override public Fragment ocr(Produkt p, GrafAdv g) { return null; } /*List ps = new ArrayList(); if (h.depth() < 30) { int[] b = (int[])h.atr("p"); if ((b != null)&&(b[0] == h.n()[0])&&(b[1] == h.n()[1])) { //System.out.println(h.printDepth() + "Hipoteza terminalna."); ps.add(h); } else { for (Integer e : g.E(h.n())) { int[] nN = g.N(e); if (h.p() != null) { if (g.NEqual(h.p().n(), nN)) { continue; } } Attrib a = new Attrib(); if (h.atr("p") == null) { a.set("p", h.n()); } if (h.atr("fail") == null) { a.set("fail", (Integer)0); } double nK = Geom.kat(h.n(), nN); Double oK = (Double)h.atr("k"); if (oK == null) { oK = nK - 5; } Produkt nh = new Produkt(nN, h, a); int fail = (Integer)nh.atr("fail"); double ln = Geom.len(nN, h.n()); if (!(ln < 3)) { a.set("k", nK); } else { //fail = fail + 1; a.set("fail", fail); } double gr = Geom.greater(nK, oK); if (((gr > 0)&&(gr < 60))||((ln < 3)&&(fail < 3))) { //System.out.println(h.printDepth() + "Hipoteza zaakceptowana: " + nK); List cps = this.akceptuj(nh, g); ps.addAll(cps); } else { //if (h.depth() > 3) { //System.out.println(h.printDepth() + "Hipoteza odrzucona, delta: " + gr); //} } } } } return ps;*/ //} }