PROBLEMA Programma in c per 2 punti equidistanti

Andretti60

Utente Èlite
6,440
5,091
creata una funzione "int DistanzaQuadrata" che presi in input 4 valori interi(le due ascisse e le due ordinate dei due punti) restituisce la distanza al quadrato sfruttando pitagora.
estremamente rischioso in quanto hai problemi di overflow: il quadrato di un intero può essere maggiore del massimo valore di un intero. Utilizza double come tipo.

per la seconda domanda non c’è grande scelta, poiché devi solo trovare una distanza in comune non c’è bisogno che le calcoli tutte. Fermati appena ne trovi due uguali.
Post unito automaticamente:

La distanza tra due punti:

Radice della somma dei quadrati dei cateti

I cateti sono la differenza delle ascisse e la differenza delle ordinate

Limiti il confronto alle basi.

Magari sbaglio.. dove?

Inviato dal mio Nexus 6P utilizzando Tapatalk
Perché due numeri possono essere gli stessi anche se formati da somme di valori diversi:
x^2 + y^2 = a^2 + b^2
per infiniti valori delle variabili x,y,a,b

(che fatica scriverlo da smartphone)
 
Ultima modifica:
  • Mi piace
Reazioni: BAT

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Quindi?

Se la distanza è

√[ (x1-x0)^2 + (y1-y0)^2 ]

basta che i due punti 1 e 2 rispetto al.punto 0 abbiano

|x1-x0| e |y1-y0| uguali rispettivamente a
|x2-x0| e |y2-y0|

significa che sono alla stessa distanza (in qualsiasi direzione). È un problema di geometria elementare.

Inviato dal mio Nexus 6P utilizzando Tapatalk
 

Andretti60

Utente Èlite
6,440
5,091
Quindi?

Se la distanza è

√[ (x1-x0)^2 + (y1-y0)^2 ]

basta che due punti abbiano

|x1-x0| e |y1-y0| uguali rispettivamente a
|x2-x0| e |y2-y0|

significa che sono alla stessa distanza (in qualsiasi direzione). È un problema di geometria elementare.

Inviato dal mio Nexus 6P utilizzando Tapatalk
Ma quello è un caso particolare, due punti possono essere equidistanti ANCHE se le differenze dei cateti sono diverse. È geometria da scuole medie. La vedi subito con l’esempio che ho fatto (tutti i triangoli inscritti in un semicerchio sono retti a hanno la stessa diagonale (ossia il diametro del cerchio)
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Ma quello è un caso particolare, due punti possono essere equidistanti ANCHE se le differenze dei cateti sono diverse. È geometria da scuole medie. La vedi subito con l’esempio che ho fatto (tutti i triangoli inscritti in un semicerchio sono retti a hanno la stessa diagonale (ossia il diametro del cerchio)

Guarda che stiamo parlando di geometria analitica. Devi disporre i punti in un piano cartesiano, non c'entrano i triangoli inscritti.

Ho detto cateti perché la differenza tra ascisse e e tra ordinate descrive sempre un triangolo rettangolo.


Inviato dal mio Nexus 6P utilizzando Tapatalk
 
Ultima modifica:

Andretti60

Utente Èlite
6,440
5,091
Guarda che stiamo parlando di geometria analitica. Devi disporre i punti in un piano cartesiano, non c'entrano i triangoli inscritti.

Inviato dal mio Nexus 6P utilizzando Tapatalk
Certo che c’entrano. Un triangolo rettangolo è metà di un rettangolo dove l’ipotenusa è la diagonale. La mia è una soluzione geometrica. Vuoi quella analitica?
Fissa il valore per la diagonale (ossia la distanza)
D=sqrt(x^2+y^2)
Puoi usare il quadrato di D per evitare la radice, non importa. Risolvi per x. Fissa il valore di D. Per OGNI valore di y, potrai SEMPRE trovare un valore per x.
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
La distanza tra due punti:

Radice della somma dei quadrati dei cateti

I cateti sono la differenza delle ascisse e la differenza delle ordinate

Limiti il confronto alle basi.

Magari sbaglio.. dove?

Inviato dal mio Nexus 6P utilizzando Tapatalk

Il che ti porta ad avere una equazione di 4 variabili e di secondo grado.

a + b = c + d. a = c e b = d è solo un caso particolare.
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Certo che c’entrano. Un triangolo rettangolo è metà di un rettangolo dove l’ipotenusa è la diagonale. La mia è una soluzione geometrica. Vuoi quella analitica?
Fissa il valore per la diagonale (ossia la distanza)
D=sqrt(x^2+y^2)
Puoi usare il quadrato di D per evitare la radice, non importa. Risolvi per x. Fissa il valore di D. Per OGNI valore di y, potrai SEMPRE trovare un valore per x.
Lascia perdere i triangoli. Vedi come si calcola la distanza tra due punti in geometria analitica.

Inviato dal mio Nexus 6P utilizzando Tapatalk
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Il che ti porta ad avere una equazione di 4 variabili e di secondo grado.

a + b = c + d. a = c e b = d è solo un caso particolare.
Cosa vuol dire?

Inviato dal mio Nexus 6P utilizzando Tapatalk
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,946
11,581
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Non serve fare quadrati e radici: due punti sono a uguale distanza se sono uguali le differenze tra le loro coordinate cioè hanno uguali delta-x e delta-y. Semplificando Pitagora infatti, è sufficiente che siano uguali i radicandi.
No, perché i radicandi possono essere uguali anche con differenze di coordinate diverse.
Considera i punti
O(0,0) ed A(5,0): la loro distanza è 5 con deltaX=5 e deltaY=0
ora considera i punti
U(1,1) e V(4,5): la loro distanza è 5 ma deltaX=3 e deltaY=4
non puoi limitarti a confrontare le differenze, almeno l'elevazione al quadrato devi farla proprio per il motivo che dici tu: dopo aver elevato al quadrato i 2 radicandi sono uguali. L'estrazione di radice puoi evitarla, l'elevazione al quadrato no.
 
Ultima modifica:

Utahraptor

Nuovo Utente
10
0
rctimelines un esempio facile per farti capire l'errore del tuo metodo:
prendiamo i punti A(0,0) B(4,3) C(10,10) D(13,14). La distanza AB è: sqrt[(4-0)^2+(3-0)^2]=sqrt(25)=5 . La distanza CD è: sqrt[(13-10)^2+(14-10)^2]=sqrt(25)=5 . Quindi AB=CD eppure la differenza di ascisse (e ordinate) è diversa infatti X(b)-X(a)=4 mentre X(d)-X(c)=3 . Il tuo è appunto un caso particolare
Post unito automaticamente:

estremamente rischioso in quanto hai problemi di overflow: il quadrato di un intero può essere maggiore del massimo valore di un intero. Utilizza double come tipo.

questo è vero ma è anche l'ultimo dei problemi :D.

per la seconda domanda non c’è grande scelta, poiché devi solo trovare una distanza in comune non c’è bisogno che le calcoli tutte. Fermati appena ne trovi due uguali.

Non capisco cosa tu voglia dire nel caso 1 mi fermo appena ne trovo 2 uguali mentre nel 2 no ma credo sia comunque più efficiente grazie al Merge Sort
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
No, perché i radicandi possono essere uguali anche con differenze di coordinate diverse.
Considera i punti
O(0,0) ed A(5,0): la loro distanza è 5 con deltaX=5 e deltaY=0
ora considera i punti
U(1,1) e V(4,5): la loro distanza è 5 ma deltaX=3 e deltaY=4
non puoi limitarti a confrontare le differenze, almeno l'elevazione al quadrato devi farla proprio per il motivo che dici tu: dopo aver elevato al quadrati i 2 radicandi sono uguali. L'estrazione di radice puoi evitarla, l'elevazione al quadrato no.
Si, in effetti deve essere uguale il radicando

Inviato dal mio Nexus 6P utilizzando Tapatalk
 
  • Mi piace
Reazioni: Utahraptor

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Conviene sempre non fare gli spacconi perchè se poi si sbaglia si fanno brutte figure :ops:
Resta comunque una cazzata!

Ho esagerato nel voler semplificare ma me ne sarei accorto se avessi dovuto scriverlo.

Inviato dal mio Nexus 6P utilizzando Tapatalk
 

Andretti60

Utente Èlite
6,440
5,091
... Non capisco cosa tu voglia dire nel caso 1 mi fermo appena ne trovo 2 uguali mentre nel 2 no ma credo sia comunque più efficiente grazie al Merge Sort
Dipende da quanti punti hai, la complessità dell’algoritmo è il quadrato del numero dei punti e devi allocare un sacco di memoria. E finito il sorting devi lo stesso scansionare tutto il vettore finché non trovi due numeri conseguivi uguali.
Piuttosto c’è un altro problema: l’arrotondamento. Difficile che due numeri double siano uguali tra loro anche se dovrebbero esserlo, a causa delle operazioni matematiche che occorre effettuare. Forse non è un grosso problema in questo caso poiché le operazioni non sono molte (e meglio evitare il calcolo della radice quadrata)
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Resta comunque una cazzata!

Ho esagerato nel voler semplificare ma me ne sarei accorto se avessi dovuto scriverlo.

Inviato dal mio Nexus 6P utilizzando Tapatalk
Chefiguradimerda. Mi sento come dovrebbe sentirsi Salvini ogni volta che dice qualcosa!

Inviato dal mio Nexus 6P utilizzando Tapatalk
 
  • Mi piace
Reazioni: Utahraptor

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili