Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-03-2006, 17:14   #1
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
[Java]Grafica 2d in generale: help collision detecion

Ciao a tutti. Avrei bisogno di implementare le collision detection in una applicazione 2d che sto progettando usando le java awt. Cerco di spiegare meglio che posso la mia situazione:
- Ho una classe Window.java che si occupa di creare la finestra. All’interno vi è un metodo render così implementato:
Codice HTML:
 public boolean render (Graphics g){
        g.setColor (backgroundColor) ;
        g.fillRect (0,0,getWidth(),getHeight()) ;
        if(checkVectors == true){
            for(int h = 0; h < iterator+1;h++){
                g.drawImage(arrayImage[h],attori[h].getX(),attori[h].getY(),this);
            }
        }
 return true ;
    }
che si occupa di fare il rendering, cioè disegnare gli attori all’interno della finestra.
- Ho una classe Attore, che al suo interno ha come variabili un oggetto finestra(affinché l’attore possa avere qualche riferimento al mondo in cui si trova), le coordinate X e Y dell’attore all’interno di quella finestra. Sempre all’interno della classe Attore vi sono metodi per accedere e aggiornare le coordinate.
- Ho anche una classe ListenerAttore per la gestione degli eventi: quando viene premuto un tasto freccia vengono così aggiornate le coordinate dell’attore e questo si muove all’interno della finestra.

Vorrei sapere che architettura devo dare alla mia applicazione per la collision detection. Precisamente vorrei che un attore arriva a un margine della finestra si fermasse cioè non andasse oltre.(evitando ovviamente lo sfarfallio che puo generare del rendering). Inoltre vorrei che se vi sono più attori all’interno di una finestra, questi siano in grado di “vedersi” e fare in modo che non si possano sovrapporre.
Spero di essermi spiegato. Prima di interpellare il forum ho cercato qualche aiuto in rete, ma ho trovato vari articoli sul collision detection in 2d e vari esempi, ma non ne ho trovato alcuno che mi possa dare una mano.Se ritenete che sia più comodo per voi che mi aiutate, posso pubblicare il codice di attore e finestra.
Ciao e grazie per ora a tutti!
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 17:47   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
La collisione è un atto divinatorio.

Può funzionare così (non sono al corrente di altre tecniche ma è ben possibile che esistano).

1. rilevi la ncessità di spostare un certo Attore dalla posizione P0 a P1
2. sposti Attore da P0 a P1
3. Attore, in posizione P1, collide con qualcos'altro?
3.1 SI, fai reagire Attore alla collisione
4. disegni Attore

Nel caso in cui la reazione, per il tipo di elemento con cui Attore collida, sia una restrizione al movimento, annulli lo spostamento, riportando Attore da P1 a P0. Il risultato è che Attore, nel caso si trovi vicino ad un "muro" non si muoverà.

Secondo il tipo di movimento potrai dover dividere la previsione di spostamento lungo i due assi:

1. Attore deve andare da P0 a P1
2. sposti attore da P0 a (P1.x, P0.y)
3. Attore collide con qualcosa?
3.1 SI, sposti attore in (P0.x, P0.y)
4. sposti Attore in (posizioneAttore.x, P1.y)
5. Attore collide con qualcosa?
5.1 SI, sposti attore in (posizioneAttore.x, P0.y);
6. disegna Attore.

Il risultato è una forma di movimento in collisione (per angoli di collisione retti).
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 20:17   #3
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
scusa, ma non ho ben capito cosa dovrei fare! Come faccio a porre la domanda "stai collidendo con qulacosa" a una entita?
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 21:59   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ogni elemento che possa collidere può occupare (fisicamente o virtualmente) una certa regione di spazio.

Dato P il "punto" in cui si trova Attore, e "img" la sua immagine, la regione potrebbe essere il rettangolo:

Codice:
Rectangle bounds = new Rectangle(
    p.x, p.y, img.getWidth(), img.getHeight());
Supponendo che ogni Attore abbia il suo rettangolo, la collisione diventa pane per i loro denti:

1. dato l'attore A
2. per ogni Attore B diverso da A:
2.1 se l'area di A interseca l'area di B A è in collisione con B

Il coinvolgimento dei rettangoli dovrebbe restare al livello di dettaglio. Ad esempio dichiari:

Codice:
public class Attore {
    private Rectangle bounds = ...
    public boolean collidesWith(Attore that) {
        return this.bounds.intersects(that.bounds);
    }
}
Nota che la faccenda dei rettangoli è un'approssimazione. E' possibile usare i pixel che compongono le immagini degli attori per stabilire se ci sia una collisione. Puoi dire, ad esempio, che A collida con B nel caso in cui l'area di A intersechi l'area di B E almeno un pixel non trasparente dell'immagine di A coincida con un pixel non trasparente dell'immagine di B. Oppure estrai dall'immagine il contorno...insomma volendo si possono ottenere sistemi più raffinati.

Nel caso in il numero di sprite sullo schermo sia esorbitante, il "ciclone" per la verifica delle collisioni potrebbe richiede al sistema un bel po' di lavoro. Puoi ridurlo ripartendo lo spazio in cui esistono gli sprite.

Dividi lo schermo in tanti quadrati. Determini il quadrante in cui si trova l'attore. Poi stabilisci quali altri sprite si trovino nello stesso quadrante, operando una scrematura sull'insieme di sprite presenti. Poi verifichi le collisione tra l'attore e quegli sprite.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 10:00   #5
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Ho capito l'idea. Ma non mi è chiara una cosa:
Questo tipo di approccio credo funzioni se so a priori che vi sono due attori. Ma nel mio caso, il render disegna un vettore di attori. Quindi credo che a un singolo attore non basti conoscere la posizione di un altro attore, ma deve conoscere le posizioni di tutti gli altri attori presenti nell'array (e deve scartare però se stesso, visto che anch'egli è nel medesimo array) Ogni volta quindi dovrei comunicare a un singolo attore le posizioni di tutti gli altri, ma questo secondo me comprometterebbe le prestazioni dell'applicazione. Sbaglio qualcoa nel ragionamento? Scusa se la domanda e la questione possono essere banali, ma in grafica 2d non sono molto ferrato...
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 12:21   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
E' tutto esatto, salvo il limite dei due attori. Senza la ripartizione dello spazio in cui si muovono gli attori, l'algoritmo è un O(n)². Scriveremmo infatti:

Codice:
//ArrayList<Attore> attori = lista di tutti gli attori esistenti
for(int i = 0; i < attori.size(); i++) {
    Attore a = attori.get(i);
    for(int k = 0; k < attori.size(); k++) {
        if(k == i) continue;
        Attore b = attori.get(k);
        if(a.collidesWith(b)) {
            //...gestione della collisione
        }
    }
}
Non c'è un limite al numero di attori in sè ma, come rilevi, esiste un problema di praticabilità: troppi attori potrebbero causare un degrado delle prestazioni (dipende dalle capacità della macchina).

Si può cercare una soluzione mediamente migliore. Mediamente, ma il caso peggiore è sempre un O(n²).

Se dividi lo spazio in settori quadrati e per ogni attore verifichi se questo collida con i soli attori presenti nello stesso quadrante, puoi scartare alcune collisioni con un'operazione più semplice della intersezione tra rettangoli.

Se associ ad ogni attore il quadrante in cui si trova, puoi scartare la verifica di collisione tra elementi che non si trovino nello stesso quadrante e che non siano passati da un quadrante all'altro nel ciclo corrente del motore di gioco.

Si tratta comunque di miglioramenti al "caso medio" e di semplificazioni apportate alle istruzioni che verificano la collisione (scartare alcune ipotesi con operazioni meno dispendiose della verifica per pixel, nel caso di sprite 2d).

Non so se ci siano algoritmi che abbiano un caso peggiore diverso di O(n²).
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
Invia il tuo nome a 1,5 milioni di chilo...
Apple MacBook Neo 13'' con chip A18 Pro ...
Insieme a Leica SL3-P presentate le otti...
La Cina svilupperà anche il razzo...
Rocket Lab e la missione Victus Haze per...
Starship: Ship 40 ha eseguito uno static...
I nuovi Samsung Galaxy Watch 9 si mostra...
Einsten aveva ragione, di nuovo: captate...
Top 10 offerte Amazon: 5 sono partite qu...
AI Conf 2026: l'intelligenza artificiale...
Samsung Galaxy S26 scende a 711,49€: un ...
Dopo il maxi blackout, la Spagna cambia ...
Costa meno di un MacBook e fa molto di p...
Ecco tutti i robot aspirapolvere rimasti...
Più partite da seguire in contemporanea?...
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: 01:34.


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