package interpretacja.gramatyka; import interpretacja.Fragment; import interpretacja.Geom; import interpretacja.GrafAdv; import interpretacja.Produkt; import java.util.ArrayList; import java.util.List; public class Rownoleglobok implements GSymbol { private Linia linia = new Linia(); private LiniaKier lKier = new LiniaKier(); @Override public List akceptuj(Produkt h, GrafAdv g) { List ps = new ArrayList(); List p1s = linia.akceptuj(h, g); for (Produkt p1 : p1s) { double l1 = Geom.len(g.N(h.n()), g.N(p1.n())); double k1 = (Double)p1.atr("kat"); Produkt p1c = new Produkt(p1.n(), p1); List p2s = linia.akceptuj(p1c, g); for (Produkt p2 : p2s) { double k2 = (Double)p2.atr("kat"); double delta = Geom.delta(k1, k2); if ((delta < 15)||((delta > 75)&&(delta < 105))||(delta > 165)) { continue; } double l2 = Geom.len(g.N(p1.n()), g.N(p2.n())); Produkt p2c = new Produkt(p2.n(), p2); p2c.dodajAtr("kat", 180 + (Double)p1.atr("kat")); List p3s = lKier.akceptuj(p2c, g); for (Produkt p3 : p3s) { double l3 = Geom.len(g.N(p2.n()), g.N(p3.n())); if (Math.abs(l3 - l1) > 5) { continue; } Produkt p3c = new Produkt(p3.n(), p3); p3c.dodajAtr("kat", 180 + (Double)p2.atr("kat")); List p4s = lKier.akceptuj(p3c, g); for (Produkt p4 : p4s) { double l4 = Geom.len(g.N(p3.n()), g.N(p4.n())); if (Math.abs(l4 - l2) > 5) { continue; } ps.add(p4); } } } } return ps; } @Override public Fragment ocr(Produkt p, GrafAdv g) { return null; } }