Ejemplo n.º 1
0
 public void CAP(Vector2d Point, int Frame, ref ColourVector ot)
 {
     int l = ThingsCache.Count();
     for (int i = 0; i < l; i++)
     {
         IPhysical<Vector2d> Current = ThingsCache[i];
         double diffX = Current.Position.x - Point.x;
         if (diffX * diffX < 1024)
         {
             double diffY = Current.Position.y - Point.y;
             if (diffY * diffY < 1024)
             {
                 if (diffX != 0 && diffY != 0)
                 {
                     double d2 = Vector2d.DistSquared(Current.Position, Point);
                     ot.AddMultiply(Current.Colour, 5184 / (d2 * d2));
                 }
             }
         }
     }
     for (int i = 0; i < ot.dimensions; i++)
     {
         ot.CoOrdinates[i] += BetterRandom.StdDev(0.01);
     }
 }
Ejemplo n.º 2
0
 public static double DistSquared(Vector2d a,Vector2d b)
 {
     return ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
 }
Ejemplo n.º 3
0
 public static double AngleTowards(Vector2d a, Vector2d b)
 {
     return Math.Atan2(a.y - b.y, a.x - b.x);
 }
Ejemplo n.º 4
0
        public ColourVector NextColourOnLine(Vector2d Point, double Angle, int Frame)
        {
            Angle = CircleifyAngle(Angle);
            IPhysical<Vector2d>[] Arr;
            int Dir;
            int Comp;

            GetArrayCompAndDirFromAngle(Angle, out Arr, out Dir, out Comp);

            int i = FindInitialIterator(Arr, Dir);
            i = MoveIteratorToFirstRelevantObject(Point, Arr, Dir, Comp, i);

            ColourVector c = new ColourVector(0, 0, 0, 0);
            double closest = FindPointsOnLine(Point, Angle, Arr, Dir, Comp, ref i, ref c);
            c.Multiply(512 / closest);
            return c;
        }
Ejemplo n.º 5
0
        private static int MoveIteratorToFirstRelevantObject(Vector2d Point, IPhysical<Vector2d>[] Arr, int Dir, int Comp, int i)
        {
            bool co = true;
            while (co)
            {
                if (Dir * (Dir * (Arr[i].Position.CoOrdinates[Comp])) < (Dir * (Point.CoOrdinates[Comp] - (80 * Dir))))
                {
                    i += Dir;
                }
                else
                {
                    co = false;
                }
            }

            return i;
        }
Ejemplo n.º 6
0
        private static double FindPointsOnLine(Vector2d Point, double Angle, IPhysical<Vector2d>[] Arr, int Dir, int Comp, ref int i, ref ColourVector c)
        {
            double closest = 3600;
            while (Dir * (Dir * (Arr[i].Position.CoOrdinates[Comp])) < (Dir * (Point.CoOrdinates[Comp] - (80 * Dir))))
            {
                Vector2d diff = (Arr[i].Position - Point);
                double DistSquared = Vector2d.DistSquared(Arr[i].Position, Point);
                if (DistSquared != 0)
                {
                    double AngleFromPoin = Vector2d.AngleTowards(Arr[i].Position, Point);
                    double NormalisedDistPerpendicularToThing = Math.Tan(Angle - AngleFromPoin);
                    double q = DistSquared * NormalisedDistPerpendicularToThing * NormalisedDistPerpendicularToThing;
                    if (q < (Arr[i].Size * Arr[i].Size))
                    {
                        if (DistSquared < closest)
                        {
                            closest = DistSquared;
                            c = Arr[i].Colour;
                        }
                    }
                }
                i++;
            }

            return closest;
        }