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 Prostokat2 implements GSymbol { private Linia linia = new Linia(10); private LiniaKier lKier = new LiniaKier(); private LiniaKier lKier10 = new LiniaKier(10); @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())); Produkt p1c = new Produkt(p1.n(), p1); p1c.dodajAtr("kat", 90 + (Double)p1.atr("kat")); List p2s = lKier.akceptuj(p1c, g); for (Produkt p2 : p2s) { double l2 = Geom.len(g.N(p1.n()), g.N(p2.n())); Produkt p2c = new Produkt(p2.n(), p2); p2c.dodajAtr("kat", 90 + (Double)p2.atr("kat")); List p3s = lKier.akceptuj(p2c, g); for (Produkt p3 : p3s) { double l3 = Geom.len(g.N(p2.n()), g.N(p3.n())); Produkt p3c = new Produkt(p3.n(), p3); p3c.dodajAtr("kat", 90 + (Double)p3.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; } Produkt p4c = new Produkt(p4.n(), p4); p4c.dodajAtr("kat", 90 + (Double)p4.atr("kat")); List p5s = lKier10.akceptuj(p4c, g); for (Produkt p5 : p5s) { double l5 = Geom.len(g.N(p4.n()), g.N(p5.n())); if (Math.abs(l1 + l5 - l3) > 5) { continue; } ps.add(p5); } } } } } return ps; } @Override public Fragment ocr(Produkt p, GrafAdv g) { return null; } }