Beispiel #1
0
        public static void GetGeometry(ushort segmentID1, ushort segmentID2,
                                       out FastSegmentList farSegments, out FastSegmentList nearSegments)
        {
            farSegments  = new FastSegmentList();
            nearSegments = new FastSegmentList();
            ushort nodeID = segmentID1.ToSegment().GetSharedNode(segmentID2);
            var    angle0 = GetSegmentsAngle(segmentID1, segmentID2);

            for (int i = 0; i < 8; ++i)
            {
                ushort segmentID = nodeID.ToNode().GetSegment(i);
                if (segmentID == 0 || segmentID == segmentID1 || segmentID == segmentID2)
                {
                    continue;
                }
                var  angle = GetSegmentsAngle(segmentID1, segmentID);
                bool near  = VectorUtil.CompareAngles_CCW_Right(source: angle0, target: angle);
                near = near ^ NetUtil.LHT;
                //Log.Debug($"GetGeometry({segmentID1}, {segmentID2}) : segment:{segmentID}\n" +
                //    $" CompareAngles_CCW_Right(angle0:{angle0*Mathf.Rad2Deg}, angle:{angle*Mathf.Rad2Deg}) -> {near}");
                if (near)
                {
                    nearSegments.Add(segmentID);
                }
                else
                {
                    farSegments.Add(segmentID);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// returns a list of all segments sourceSegmentID is connected to including itself
        /// if uturn is allowed.
        /// </summary>
        /// <param name="sourceSegmentID"></param>
        /// <param name="nodeID"></param>
        /// <returns></returns>
        public static FastSegmentList GetTargetSegments(ushort sourceSegmentID, ushort nodeID)
        {
            var ret = new FastSegmentList();

            foreach (ushort targetSegmentID in NetUtil.IterateNodeSegments(nodeID))
            {
                if (DoesSegmentGoToSegment(sourceSegmentID, targetSegmentID, nodeID))
                {
                    ret.Add(targetSegmentID);
                }
            }
            return(ret);
        }
Beispiel #3
0
 static bool IntersectAny(FastSegmentList segmentsA, FastSegmentList segmentsB)
 {
     for (int a = 0; a < segmentsA.Count; ++a)
     {
         for (int b = 0; b < segmentsB.Count; ++b)
         {
             if (segmentsA[a] == segmentsB[b])
             {
                 return(true);
             }
         }
     }
     return(false);
 }