Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-06-2011, 22:16   #1
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
[c#]Algoritmo per verificare se un punto è contenuto in 1 poligono concavo e convesso

Ciao a tutti, spero possa essere utile questa soluzione che ho trovato per verificare se un punto è contenuto o meno all'interno di un poligono, sia che esso sia concavo sia convesso. Io l'ho applicato a google maps, ovvero dato un poligono disegnato con le coordinate gps , verifico se un punto è all'interno o meno.

ecco il codice:

Codice:
 public class puntoAppartienePoligono
    {
        #region Variables
        Dictionary<int, MarkerColorato> ListaVertici;
        #endregion
        #region 2 versione
        
        public puntoAppartienePoligono(Dictionary <int, MarkerColorato> Lista)
        {
            ListaVertici = Lista;
        }

        public bool IsInside(MarkerColorato punto)
        {
            CultureInfo usCulture = new CultureInfo("en-US");

                /* The points creating the polygon. */
            float[] x = new float[ListaVertici.Count];
            float[] y = new float[ListaVertici.Count];
            float x1,x2;

            /* The coordinates of the point */
            float px, py;
            px = float.Parse(punto.X,usCulture);
            py = float.Parse(punto.Y,usCulture);
 
            /* How many times the ray crosses a line-segment */
            int crossings = 0;
            
            ///* Coordinates of the points */
            for (int i = 0; i < ListaVertici.Count;i++)
            {
                x[i] = float.Parse(ListaVertici.ElementAt(i).Value.X,usCulture);
                y[i] = float.Parse(ListaVertici.ElementAt(i).Value.Y,usCulture);
            }
            
            /* Iterate through each line */
            //for ( int i = 0; i < 8; i++ ){
            for ( int i = 0; i < ListaVertici.Count-1; i++ )
            {
                /* This is done to ensure that we get the same result when
                the line goes from left to right and right to left */
                if (x[i] < x[(i + 1) % (ListaVertici.Count - 1)])
                {
                        x1 = x[i];
                        x2 = x[(i + 1) % (ListaVertici.Count - 1)];
                } 
                else 
                {
                    x1 = x[(i + 1) % (ListaVertici.Count - 1)];
                        x2 = x[i];
                }
       
                /* First check if the ray is possible to cross the line */
                if ( px > x1 && px <= x2 && ( py < y[i] || py <= y[(i+1)%8] ) )
                {
                        //static const float eps = 0.000001;
                        const float eps = (float)0.000001;
 
                        /* Calculate the equation of the line */
                        float dx = x[(i + 1) % (ListaVertici.Count - 1)] - x[i];
                        float dy = y[(i + 1) % (ListaVertici.Count - 1)] - y[i];
                        float k;
 
                        //if ( fabs(dx) < eps ){
                        if (Math.Abs(dx) < eps)
                            k = float.PositiveInfinity;
                        else
                            k = dy/dx;
 
                        float m = y[i] - k * x[i];
               
                        /* Find if the ray crosses the line */
                        float y2 = k * px + m;
                        if ( py <= y2 )
                            crossings++;
                }
            }
 
            //printf("The point is crossing %d lines", crossings);
            if (crossings % 2 == 1)
                return true;
            else
                return false;
        }
        #endregion
    }
come potete vedere nel costruttore gli passo un tipo MarkerColorato, che altro non è che una classe che ho definito io.

Ecco sotto al definizione della classe:


Codice:
public class MarkerColorato
    {
        public string X;
        public string Y;
        public string Localita;
        public static string[] colors = { "black", "brown", "purple", "yellow", "blue", "gray", "orange", "red", "white" };
        public static string coloreOk = "green";
        public string color;
        public int areaID;
        string label;

        public MarkerColorato(string x, string y)
        {
            X = x;
            Y = y;
            label = RandomHelper.RandomString(1, false);
            UseRandomColor();
        }

        public MarkerColorato(string x, string y, string localita)
        {
            X = x;
            Y = y;
            Localita = localita;
            label = RandomHelper.RandomString(1, false);
            UseRandomColor();
        }

        public MarkerColorato(string x, string y, int id)
        {
            X = x;
            Y = y;
            areaID = id;
            label = RandomHelper.RandomString(1, false);
            UseRandomColor();
        }

   
        /// <summary>Assegna a questo marker un colore random</summary>
        public void UseRandomColor()
        {
            color = colors[RandomHelper.RandomNumber(0, 8)];
        }

        public string urlMarker()
        {
             string urlMarkerBase = "&markers=";
             string urlLabel = "|label:";
             string urlChiusuraLabel = "|";
             string urlColor = "color:"+color;
             string urlCoordinateMarker = X + "," + Y;
             return urlMarkerBase +  urlColor + urlLabel + label + urlChiusuraLabel + urlCoordinateMarker;
        }

        
    }

spero possa essere utile a qualcuno.
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Tomb Raider: Catalyst, il cast si allarg...
Renault Group chiude un ottimo 2025: Dac...
A questo prezzo la Blink Mini è difficil...
DJI Mini 4 Pro Fly More a 859€ su Amazon...
realme P4 Power avrà una batteria...
Marathon: data di uscita, edizioni e tut...
Dojo 3 riparte: Tesla affida a Intel il ...
Smartphone e attenzione in frantumi: Mat...
Aerei costruiti da robot umanoidi? L'eur...
Chery prende tutti in contropiede: batte...
Il colpo silenzioso di Intel: arriva l'u...
PosteMobile passa a TIM: ecco quando sca...
I nuovi chip M5 Pro, Max e Ultra sono se...
Nuove livree, tocca a Haas "Toyota&...
Cambia la Dynamic Island? Con iPhone 18 ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v