Exemplo n.º 1
0
        public void Execute(LaplaceFilter pulseFilter, double direction)
        {
            Threshold += ThresholdSpike;
            var newX = pulseFilter.RetinalPosition.X + (Math.Cos((Math.PI / 180) * direction) * 25);
            var newY = pulseFilter.RetinalPosition.Y + (Math.Sin((Math.PI / 180) * direction) * 25);

            GlobalLayersKnowledge.Muscle.MoveEye((int)newX, (int)newY);
        }
Exemplo n.º 2
0
        public void ExecutePulse(LaplaceFilter pulseFilter, int xStart, int yStart)
        {
            GlobalLayersKnowledge.DirectionRouter.XNormal = xStart;
            GlobalLayersKnowledge.DirectionRouter.YNormal = yStart;

            foreach (var laplaceFilter in LaplaceFilterField)
            {
                laplaceFilter.DirectionFire();
            }



            //testing stuff past here
            var environmentCopyOne = new Bitmap(GlobalLayersKnowledge.Environment);

            if (GlobalLayersKnowledge.DirectionNodes.Max(x => x.Charge) > GlobalLayersKnowledge.DirectionPulsePlate.Threshold)
            {
                var highestNode =
                    GlobalLayersKnowledge.DirectionNodes.First(
                        x => (x.Charge == GlobalLayersKnowledge.DirectionNodes.Max(y => y.Charge)));

                for (int x = -1; x <= 1; x++)
                {
                    for (int y = -1; y <= 1; y++)
                    {
                        environmentCopyOne.SetPixel(Location.X + pulseFilter.RetinalPosition.X + x, Location.Y + pulseFilter.RetinalPosition.Y + y, Color.Crimson);
                        var endPointX = Location.X + pulseFilter.RetinalPosition.X + (Math.Cos((Math.PI / 180) * highestNode.Direction) * 25);
                        var endPointY = Location.Y + pulseFilter.RetinalPosition.Y + (Math.Sin((Math.PI / 180) * highestNode.Direction) * 25);
                        environmentCopyOne.SetPixel((int)endPointX + x, (int)endPointY + y, Color.Chartreuse);
                    }
                }

                string environmentFilePath = System.IO.Directory.GetCurrentDirectory() + "/Results/EdgeNode" + GlobalLayersKnowledge.Counter + ".png";
                environmentCopyOne.Save(environmentFilePath);

                GlobalLayersKnowledge.DirectionPulsePlate.Execute(pulseFilter, highestNode.Direction);
            }
            //end testing zone
        }
Exemplo n.º 3
0
        public EyeBot(int receptorFieldWidth, int receptorFieldHeight)//BREAKS WHEN WIDTH AND HEIGHT ARE NOT SET TO IDENTICAL VALUES
        {
            GlobalLayersKnowledge.Muscle = new EyeMuscle(this);

            ReceptorField       = new List <Receptor>();
            LaplaceFilterField  = new List <LaplaceFilter>();
            Location            = new XYLocation((int)(GlobalLayersKnowledge.Randomer.NextDouble() * GlobalLayersKnowledge.Environment.Width), (int)(GlobalLayersKnowledge.Randomer.NextDouble() * GlobalLayersKnowledge.Environment.Height));
            ReceptorFieldWidth  = receptorFieldWidth;
            ReceptorFieldHeight = receptorFieldHeight;

            List <List <Receptor> >      receptorLocationHolder      = new List <List <Receptor> >();
            List <List <LaplaceFilter> > laplaceFilterLocationHolder = new List <List <LaplaceFilter> >();

            for (int i = (int)(-1 * (.5 * ReceptorFieldWidth)); i < (int)(.5 * ReceptorFieldWidth); i++)
            {
                receptorLocationHolder.Add(new List <Receptor>());
                laplaceFilterLocationHolder.Add(new List <LaplaceFilter>());
                for (int j = (int)(-1 * (.5 * ReceptorFieldHeight)); j < (int)(.5 * ReceptorFieldHeight); j++)
                {
                    var newReceptor = new Receptor(i, j, this);
                    ReceptorField.Add(newReceptor);
                    receptorLocationHolder[i + (int)(.5 * ReceptorFieldWidth)].Add(newReceptor);

                    var newLaplaceFilter = new LaplaceFilter(i, j);
                    LaplaceFilterField.Add(newLaplaceFilter);
                    laplaceFilterLocationHolder[i + (int)(.5 * ReceptorFieldWidth)].Add(newLaplaceFilter);
                }
            }

            foreach (Receptor receptor in ReceptorField)
            {
                for (int i = -1; i <= 1; i++)
                {
                    for (int j = -1; j <= 1; j++)
                    {
                        if (i == 0 && j == 0)
                        {
                            receptor.SelfFilter =
                                laplaceFilterLocationHolder[receptor.RetinalPosition.Y + (int)(.5 * ReceptorFieldWidth) + i][
                                    receptor.RetinalPosition.X + (int)(.5 * ReceptorFieldHeight) + j];
                        }
                        if (receptor.RetinalPosition.Y >= -(int)(.5 * ReceptorFieldHeight) + 1 && receptor.RetinalPosition.Y < (int)(.5 * ReceptorFieldHeight) - 1 && receptor.RetinalPosition.X >= -(int)(.5 * ReceptorFieldWidth) + 1 && receptor.RetinalPosition.X < (int)(.5 * ReceptorFieldWidth) - 1)
                        {
                            receptor.AdjacentFilters.Add(
                                laplaceFilterLocationHolder[receptor.RetinalPosition.Y + (int)(.5 * ReceptorFieldWidth) + i][
                                    receptor.RetinalPosition.X + (int)(.5 * ReceptorFieldHeight) + j]);
                        }
                    }
                }
            }

            List <MacroSector>         macroSectors = new List <MacroSector>();
            List <List <MacroSector> > macroSectorLocationHolder = new List <List <MacroSector> >();
            var counter = 0;

            for (int i = (int)(-1 * (.5 * ReceptorFieldWidth)); i < (int)(.5 * ReceptorFieldWidth); i = i + (int)(.1 * ReceptorFieldWidth))
            {
                macroSectorLocationHolder.Add(new List <MacroSector>());
                for (int j = (int)(-1 * (.5 * ReceptorFieldHeight)); j < (int)(.5 * ReceptorFieldHeight); j = j + (int)(.1 * ReceptorFieldHeight))
                {
                    var newMacroSector = new MacroSector(i + ((int)(.05 * ReceptorFieldHeight)), j + ((int)(.05 * ReceptorFieldWidth))); //haxorz
                    macroSectorLocationHolder[counter].Add(newMacroSector);
                    macroSectors.Add(newMacroSector);
                }
                counter++;
            }

            //micro version copy
            List <MicroSector>         microSectors = new List <MicroSector>();
            List <List <MicroSector> > microSectorLocationHolder = new List <List <MicroSector> >();
            var microCounter = 0;

            for (int i = (int)(-1 * (.05 * ReceptorFieldWidth)); i < (int)(.05 * ReceptorFieldWidth); i = i + (int)(.01 * ReceptorFieldWidth))
            {
                microSectorLocationHolder.Add(new List <MicroSector>());
                for (int j = (int)(-1 * (.05 * ReceptorFieldHeight)); j < (int)(.05 * ReceptorFieldHeight); j = j + (int)(.01 * ReceptorFieldHeight))
                {
                    var newMicroSector = new MicroSector(i + ((int)(.005 * ReceptorFieldHeight)), j + ((int)(.005 * ReceptorFieldWidth))); //haxorz
                    microSectorLocationHolder[microCounter].Add(newMicroSector);
                    microSectors.Add(newMicroSector);
                }
                microCounter++;
            }
            //end copy

            foreach (LaplaceFilter laplaceFilter in LaplaceFilterField)
            {
                laplaceFilter.PulsePlate = GlobalLayersKnowledge.DirectionPulsePlate;

                if ((Math.Abs(laplaceFilter.RetinalPosition.X) < .05 * ReceptorFieldWidth) &&
                    (Math.Abs(laplaceFilter.RetinalPosition.Y) < .05 * ReceptorFieldHeight))
                {
                    var receptorXDivisor = (int)(.01 * ReceptorFieldWidth);
                    var receptorYDivisor = (int)(.01 * ReceptorFieldHeight);
                    var xIndex           = (int)(((double)laplaceFilter.RetinalPosition.X / (double)receptorXDivisor) + 5);
                    var yIndex           = (int)(((double)laplaceFilter.RetinalPosition.Y / (double)receptorYDivisor) + 5);
                    laplaceFilter.Sector = microSectorLocationHolder[yIndex][xIndex];
                    microSectorLocationHolder[yIndex][xIndex].LaplaceFilters.Add(laplaceFilter);
                }
                else
                {
                    var receptorXDivisor = (int)(.1 * ReceptorFieldWidth);
                    var receptorYDivisor = (int)(.1 * ReceptorFieldHeight);
                    var xIndex           = (int)(((double)laplaceFilter.RetinalPosition.X / (double)receptorXDivisor) + 5);
                    var yIndex           = (int)(((double)laplaceFilter.RetinalPosition.Y / (double)receptorYDivisor) + 5);
                    laplaceFilter.Sector = macroSectorLocationHolder[yIndex][xIndex];
                    macroSectorLocationHolder[yIndex][xIndex].LaplaceFilters.Add(laplaceFilter);
                }
            }
            GlobalLayersKnowledge.Receptors      = ReceptorField;
            GlobalLayersKnowledge.LaplaceFilters = LaplaceFilterField;
            GlobalLayersKnowledge.MacroSectors   = macroSectors;
            GlobalLayersKnowledge.MicroSectors   = microSectors;
        }