Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-06-2007, 17:10   #1
x-t
Member
 
Iscritto dal: Sep 2006
Messaggi: 207
Aiutatemi con questo algoritmo, vi prego! Sto esaurendo

Salve a tutti.
Ho qualche problemino con un algoritmo.
Di seguito vi posto il metodo (io l'ho fatto in java, ma ovviamente non è un problema di linguaggio). Questo deve verificare se 2 segmenti si intersecano (il tutto in coordinate cartesiane).
In ingresso prende 2 coppie x, y; ogni coppia rappresenta un segmento.
La funzione deve restituire vero se si intersecano, falso altrimenti.
____________________________________________________
public boolean si_intersecano(double x11,double y11,double x21,double y21,double x12,double y12,double x22,double y22){
//primo segmento
//x11
//y11
//x21
//y21
//secondo segmento
//x12
//y12
//x22
//y22

double a= (y21-y11);
double b=(x11-x21);
double c=x11*(y11-y21)+y11*(x21-x11);//l'equazione ax + by + c=0 rappresenta la retta che contiene il segmento 1, caratterizzato dai punti: (x11,y11) (x21,y21)
double d=(y22-y12);
double e=(x12-x22);
double f=x12*(y12-y22)+y12*(x22-x12);//l'equazione dx + ey + f=0 rappresenta la retta che contiene il secondo segmento, caratterizzato dai punti: (x12,y12) (x22,y22)
double xint=0;//punto di intersezione x
if((a*e-b*d)!=0) xint=(-c*e+b*f)/(a*e-b*d);

double yint=0;//punto di intersezione y
if((a*e-b*d)!=0) yint=(-f*a+c*d)/(a*e-b*d);
if((a*e-b*d)==0 ) return false;
//se le rette sono parallele o sovrapposte ritorno falso,
//so che non è giusto, ma nel mio caso mi va bene



//ora dobbiamo verificare che il punto di intersezione appartenga ad entrambi i segmenti
double maxx1;
double maxy1;
double maxx2;
double maxy2;
double minx1;
double miny1;
double minx2;
double miny2;
if(x11>x21) {maxx1=x11; minx1=x21;} else {maxx1=x21; minx1=x11;}
if(y11>y21) {maxy1=y11; miny1=y21;} else {maxy1=y21; miny1=y11;}
if(x12>x22) {maxx2=x12; minx2=x22;} else {maxx2=x22; minx2=x12;}
if(y12>y22) {maxy2=y12; miny2=y22;} else {maxy2=y22; miny2=y12;}

if (xint<=maxx1 && xint<=maxx2 && xint>=minx1 && xint>=minx2 && yint<=maxy1 && yint<=maxy2 && yint>=miny1 && yint >= miny2) return true;
else return false;
}
__________________________________________________________
Dunque, risolvo un sistema di equazioni in 2 incognite, ottengo l'intersezione, e verifico che l'intersezione appartenga ad entrambi i segmenti.
Eppure, non funziona sempre!
Non capisco proprio dove sia il problema! sto esaurendo!
IMPORTANTE! anche se l'algoritmo considera 2 eventuali segmenti sovrapposti come segmenti che non si intersecano, questo non è importante ai miei fini, perchè nel mio caso è una situazione che non si presenta mai.
Il problema è da qualche altra parte, ma non capisco proprio dove.Aiutooooooooooo
x-t è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2007, 20:33   #2
Perry_Rhodan
Member
 
L'Avatar di Perry_Rhodan
 
Iscritto dal: Jul 2005
Città: Canelli
Messaggi: 158
Forse dico una cagata, nel qual caso scusami, ma non è che entra in gioco l'epsilon di macchina?
Cioè quando si confrontano dei valori double i due numeri potrebbero apparire diversi alla macchina anche se invece dovrebbero essere uguali, semplicemente perchè differiscono per una o più delle cifre meno significative a causa degli errori di arrotondamento.

es:

per la macchina A==B solo se tutti i bit di A e B coincidono

Ma se A e B hanno valori che differiscono di pochissimo tanto da essere praticamente uguali, per il computer continueranno ad essere diversi anche se questa differenza è solo dovuta agli arrotondamenti dei calcoli.

Contando l'epsilon di macchina dovresti avere:

A==B se |A-B|<= epsilon

Scusa se sono stato un po' contorto nella spiegazione
Perry_Rhodan è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2007, 20:53   #3
Perry_Rhodan
Member
 
L'Avatar di Perry_Rhodan
 
Iscritto dal: Jul 2005
Città: Canelli
Messaggi: 158
guarda questa faq java, forse può esserti utile:

http://www.javastaff.com/faq.php#r204
Perry_Rhodan è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2007, 00:41   #4
x-t
Member
 
Iscritto dal: Sep 2006
Messaggi: 207
ok....tutto risolto....ho trovato un algoritmo già bello e pronto....
Cmq (parlo con Perry_Rhodan), no, il problema non era quello; nel mio codice si trattava solo di trovare un'intersezione e fare delle verifiche di tipo maggiore minore ecc (che non potevano riguardare, nel mio caso, valori così piccoli da poter dare questi problemi)... quindi quei tipi di problemi non potevano presentarsi. Il problema riguardava sicuramente qualche oscura maligna riga di codice scritta male che voleva farmi esaurire.
Se qualcuno, in un futuro remoto, dovesse capitare nel mio stesso problema, può trovare l'algoritmo a questo indirizzo: http://www.cg-cad.com/ttlisp132.htm (non immediato da capire, ma quello che conta è che è funzionale al massimo).
Nel mio caso l'ho portato in java (con le opportune modifiche), e ho cambiato gli int con i double, e tutto ha funzionato alla perfezione! Santo subito chi l'ha messo su internet!
Grazie comunque dell'interessamento Perry_Rhodan !

Ultima modifica di x-t : 28-06-2007 alle 00:47.
x-t è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2007, 22:54   #5
a2000.1
Senior Member
 
L'Avatar di a2000.1
 
Iscritto dal: Aug 2004
Messaggi: 311
Quote:
Originariamente inviato da x-t Guarda i messaggi
...
Se qualcuno, in un futuro remoto, dovesse capitare nel mio stesso problema, può trovare l'algoritmo a questo indirizzo: http://www.cg-cad.com/ttlisp132.htm (non immediato da capire, ma quello che conta è che è funzionale al massimo).
...
mah
__________________
Senior Member
Registrato il: Jan 2001
Messaggi: 2609
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
TSMC approva investimenti record da quas...
L'IA agentica arriva anche sullo storage...
Euro digitale, il Parlamento UE cambia r...
Alphabet e la sua obbligazione centenari...
L'UE anticipa un intervento per bloccare...
Il Trump Phone esiste ma è molto ...
Frodi deepfake fuori controllo: perch&ea...
Consumano il 30% in meno: arrivano i nuo...
Tesla Semi svela i numeri definitivi: 80...
La Air Force statunitense vieta occhiali...
Wi-Fi Intel e Windows: le novità ...
Dongfeng sbarca 'a casa loro': il nuovo ...
BYD ATTO 3 EVO: 3,9 secondi sullo 0-100 ...
Horizon 3 potrebbe arrivare tra 3-5 anni...
Spostare il 40% della produzione in USA?...
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: 17:41.


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