Beispiel #1
0
        // Generate random point in polygon
        public static GTAVector RandPointInPoly(GTALocation x)
        {
            float maxX = float.MinValue;
            float maxY = float.MinValue;
            float minX = float.MaxValue;
            float minY = float.MaxValue;
            float avgZ = 0f;

            foreach (GTAVector v in x.ROI)
            {
                maxX  = Math.Max(maxX, v.X);
                maxY  = Math.Max(maxY, v.Y);
                minX  = Math.Min(minX, v.X);
                minY  = Math.Min(minY, v.Y);
                avgZ += v.Z;
            }
            avgZ /= x.ROI.Count;
            avgZ += 0.5f;
            while (true)
            {
                GTAVector v = new GTAVector(random.NextFloat(minX, maxX), random.NextFloat(minY, maxY), avgZ);
                if (PointInPoly(x, v))
                {
                    return(v);
                }
            }
        }
Beispiel #2
0
        public static bool PointInPoly(GTALocation loc, GTAVector v)
        {
            int   max_point   = loc.ROI.Count - 1;
            float total_angle = GetAngle(loc.ROI[max_point].X, loc.ROI[max_point].Y, v.X, v.Y, loc.ROI[0].X, loc.ROI[0].Y);

            for (int i = 0; i < max_point; i++)
            {
                total_angle += GetAngle(
                    loc.ROI[i].X, loc.ROI[i].Y,
                    v.X, v.Y,
                    loc.ROI[i + 1].X, loc.ROI[i + 1].Y);
            }
            return(Math.Abs(total_angle) > 1);
        }