Exemple #1
0
        // TODO: keep dry
        private int ComputeDistance(TConfiguration configuration1, TConfiguration configuration2)
        {
            var distance = roomShapeGeometry.GetCenterDistance(configuration1, configuration2);

            if (distance < 0)
            {
                throw new InvalidOperationException();
            }

            return(distance);
        }
        /// <inheritdoc />
        /// <summary>
        /// Checks if two layouts are different enough by comparing positions of corresponding nodes.
        /// </summary>
        public virtual bool AreDifferentEnough(TLayout layout1, TLayout layout2, IList <TNode> chain)
        {
            // TODO: make better
            var diff = 0d;

            foreach (var node in chain)
            {
                if (layout1.GetConfiguration(node, out var c1) && layout2.GetConfiguration(node, out var c2))
                {
                    // Changed

                    //diff += (float)(Math.Pow(
                    //	                5 * IntVector2.ManhattanDistance(c1.Shape.BoundingRectangle.Center + c1.Position,
                    //		                c2.Shape.BoundingRectangle.Center + c2.Position) / (float)AverageSize, 2) * (ReferenceEquals(c1.Shape, c2.Shape) ? 1 : 4));

                    diff += (float)(Math.Pow(
                                        5 * RoomShapeGeometry.GetCenterDistance(c1, c2) / (float)AverageSize, 2) * (ReferenceEquals(c1.RoomShape, c2.RoomShape) ? 1 : 4));
                }
            }

            diff = diff / (chain.Count());

            return(DifferenceFromAverageScale * diff >= 1);
        }