示例#1
0
        private Corner MakeCorner(Vector point)
        {
            if (point == null)
            {
                return(null);
            }
            int bucket;

            for (bucket = (int)point.X - 1; bucket <= (int)point.X + 1; bucket++)
            {
                foreach (Corner possibleCorner in (ArrayList)_cornerMap[bucket])
                {
                    var dx = point.X - possibleCorner.location.X;
                    var dy = point.Y - possibleCorner.location.Y;
                    if (dx * dx + dy * dy < 1E-6)
                    {
                        return(possibleCorner);
                    }
                }
            }
            bucket = (int)point.X;
            if (_cornerMap[bucket] == null)
            {
                _cornerMap[bucket] = new ArrayList();
            }
            var corner = new Corner {
                index     = _corners.Count,
                location  = point,
                mapBorder =
                    (Math.Abs(point.X) < 1E-6 || Math.Abs(point.X - _size) < 1E-6 || Math.Abs(point.Y) < 1E-6 ||
                     Math.Abs(point.Y - _size) < 1E-6),
                touches   = new HashSet <Center>(),
                protrudes = new HashSet <Edge>(),
                adjacent  = new HashSet <Corner>()
            };

            _corners.Add(corner);
            _cornerMap[bucket] = corner;
            return(corner);
        }
示例#2
0
文件: Vector.cs 项目: sztosz/Blackout
 /// <summary>
 ///     Add another vector
 /// </summary>
 /// <param name="vector">V</param>
 public void Add(Vector vector)
 {
     for (var i = 0; i < Dimension; i++) {
         this[i] += vector[i];
     }
 }
示例#3
0
文件: Vector.cs 项目: sztosz/Blackout
 /// <summary>
 ///     Build a new vector as a copy of an existing one
 /// </summary>
 /// <param name="vector">The existing vector</param>
 public Vector(Vector vector)
     : this(vector._data)
 {
 }
示例#4
0
文件: Vector.cs 项目: sztosz/Blackout
 public static double Dist(Vector vector, Site site)
 {
     if (vector.Dimension != 2) {
         return -1;
     }
     return Math.Pow(vector.X - site.X, 2) + Math.Pow(vector.Y - site.Y, 2); ;
 }
示例#5
0
文件: Vector.cs 项目: sztosz/Blackout
 /// <summary>
 ///     Get the distance of two vectors
 /// </summary>
 public static double Dist(Vector a, Vector b)
 {
     if (a.Dimension != b.Dimension) {
         return -1;
     }
     var distance = 0.0d;
     for (var i = 0; i < a.Dimension; i++) {
         distance += Math.Pow(a[i] - b[i], 2);
     }
     return distance;
 }
示例#6
0
文件: Vector.cs 项目: sztosz/Blackout
 /// <summary>
 ///     Subtract two vectors
 /// </summary>
 public static Vector operator -(Vector a, Vector b)
 {
     if (a.Dimension != b.Dimension) {
         throw new Exception("Vectors of different dimension!");
     }
     var vector = new Vector(a.Dimension);
     for (var i = 0; i < a.Dimension; i++) {
         vector[i] = a[i] - b[i];
     }
     return vector;
 }
示例#7
0
文件: Vector.cs 项目: sztosz/Blackout
 /// <summary>
 ///     Scale one vector
 /// </summary>
 public static Vector operator *(Vector vector, double scalar)
 {
     var newVector = new Vector(vector.Dimension);
     for (var i = 0; i < vector.Dimension; i++) {
         newVector[i] = vector[i] * scalar;
     }
     return newVector;
 }
示例#8
0
 private Corner MakeCorner(Vector point)
 {
     if (point == null) {
         return null;
     }
     int bucket;
     for (bucket = (int) point.X - 1; bucket <= (int) point.X + 1; bucket++) {
         foreach (Corner possibleCorner in (ArrayList) _cornerMap[bucket]) {
             var dx = point.X - possibleCorner.location.X;
             var dy = point.Y - possibleCorner.location.Y;
             if (dx * dx + dy * dy < 1E-6) {
                 return possibleCorner;
             }
         }
     }
     bucket = (int) point.X;
     if (_cornerMap[bucket] == null) {
         _cornerMap[bucket] = new ArrayList();
     }
     var corner = new Corner {
         index = _corners.Count,
         location = point,
         mapBorder =
             (Math.Abs(point.X) < 1E-6 || Math.Abs(point.X - _size) < 1E-6 || Math.Abs(point.Y) < 1E-6 ||
              Math.Abs(point.Y - _size) < 1E-6),
         touches = new HashSet<Center>(),
         protrudes = new HashSet<Edge>(),
         adjacent = new HashSet<Corner>()
     };
     _corners.Add(corner);
     _cornerMap[bucket] = corner;
     return corner;
 }