private void TryFindPerpendicularDistanceB()
        {
            //Try to get perpendicular
            float angleA = Vector3.Angle(MinDistance.Point1 - MinDistance.Point2, altDistance2.Point1 - altDistance2.Point2);
            float angleB = Vector3.Angle(MinDistance.Point1 - MinDistance.Point2, MinDistance.Point1 - altDistance2.Point1);

            if (angleB >= 90 || angleA + angleB <= 90)
            {
                // No correct perpendicular for this triangle
            }
            else
            {
                // Correct perpendicular exists
                float angleAnewRad = (180 - 90 - angleB) * Mathf.Deg2Rad;
                float distanceB    = MinDistance.Distance * Mathf.Cos(angleAnewRad);
                float distanceA    = distanceB * Mathf.Tan(angleAnewRad);

                Vector3 ship2sideVector = altDistance2.Point1 - MinDistance.Point1;
                float   scale           = distanceA / Vector3.Distance(MinDistance.Point1, altDistance2.Point1);

                Vector3 difference   = ship2sideVector * scale;
                Vector3 nearestPoint = MinDistance.Point1 + difference;

                minDistancePerpB = new RangeHolder(MinDistance.Point2, nearestPoint);
            }
        }
        private void FindNearestDistances()
        {
            List <RangeHolder> distances = new List <RangeHolder>();

            // Check distances from all edges to all edges
            foreach (var ship1point in Ship1.ShipBase.GetBaseEdges())
            {
                foreach (var ship2point in Ship2.ShipBase.GetBaseEdges())
                {
                    distances.Add(new RangeHolder(ship1point.Value, ship2point.Value));
                }
            }

            distances = distances.OrderBy(n => n.Distance).ToList();

            // MinDistance - shortest distance between edges
            MinDistance = distances.First();
            distances.Remove(MinDistance);

            // Save alternative short distances for perpendicular distance calculations
            altDistance1 = distances.First(n => n.Point1 == MinDistance.Point1);
            altDistance2 = distances.First(n => n.Point2 == MinDistance.Point2);
        }