Rettangolo nel piano cartesiano

Messaggioda gabry » 27/03/2006, 16:13

Il mio problema e' il seguente: dati i 4 punti che compongono un rettangolo nel piano cartesiano, e dato un quinto punto, esiste un algoritmo per capire se il punto e' contenuto nel rettangolo?
Avatar utente
gabry
Starting Member
Starting Member
 
Messaggio: 4 di 8
Iscritto il: 04/06/2004, 11:16

Messaggioda Cheguevilla » 27/03/2006, 16:21

Certo.
Sono necessari solo due vertici del rettangolo, cioè quelli di una diagonale.
Supponendo che il punto a sia quello in alto a sinistra, condizione ottenibile con un semplice algoritmo:
Chiamiamoli ax, ay, bx, by.
Codice:
if(ax<xx && xx<bx && by<yy && yy<ay) return VERO
else return FALSO


Se il problema e' ordinare i punti in modo da trovare quello in alto a sinistra e quello in basso a destra:
Supponiamo che le coordinate del rettangolo siano contenute in una matrice 4x2, in riga i punti, in colonna x e y.
Codice:
for(punto=1;punto<=3;punto++)
   {
    a=b=0;
    if(rettangolo[punto][0]<=rettangolo[a][0] && rettangolo[punto][1]>=rettangolo[a][1]) a=punto;
    if(rettangolo[punto][0]>=rettangolo[a][0] && rettangolo[punto][1]<=rettangolo[a][1]) b=punto;
   }
Ultima modifica di Cheguevilla il 27/03/2006, 16:32, modificato 1 volta in totale.
Immagine

Rischiavano la strada e per un uomo
ci vuole pure un senso a sopportare
di poter sanguinare
e il senso non dev'essere rischiare
ma forse non voler più sopportare.
Avatar utente
Cheguevilla
Cannot live without
Cannot live without
 
Messaggio: 190 di 3869
Iscritto il: 12/02/2003, 13:24
Località: København

Eheheh

Messaggioda gabry » 27/03/2006, 16:25

troppo facile... in realta' io non ho detto "un rettangolo con i lati paralleli agli assi" ;)
l'idea e' quella di trovare le rette parallele ai lati passanti per il centro e poi misurare se la distanza da tali rette al punto e' maggiore della meta' del lato opposto, ma algoritmicamente parlando viene complicata, in piu' e' difficile gestire la m dell'equazione canonica perche' puo' andare ad infinito, ma un linguaggio di programmazione, per come gestisce la costante infinito, crea un gap notevole tra l'ultimo punto prima di infinito e l'infinito stesso.
Ultima modifica di gabry il 27/03/2006, 17:09, modificato 1 volta in totale.
Avatar utente
gabry
Starting Member
Starting Member
 
Messaggio: 5 di 8
Iscritto il: 04/06/2004, 11:16

Messaggioda Cheguevilla » 27/03/2006, 16:53

Si, esiste.
Ora me ne viene in mente uno un po' violento, ma forse ne esistera' uno piu' semplice.
Calcola il coefficiente angolare dei due segmenti.
Considera un punto qualsiasi come giacente su una retta con lo stesso coefficiente angolare di uno dei due segmenti.
Trova l'intersezione con l'asse x di questa retta.
La differenza tra l'intersezione e l'origine e' pari alla differenza (orizzontale o verticale) tra il punto e il segmento in considerazione.
Immagine

Rischiavano la strada e per un uomo
ci vuole pure un senso a sopportare
di poter sanguinare
e il senso non dev'essere rischiare
ma forse non voler più sopportare.
Avatar utente
Cheguevilla
Cannot live without
Cannot live without
 
Messaggio: 191 di 3869
Iscritto il: 12/02/2003, 13:24
Località: København

Messaggioda gabry » 29/03/2006, 20:54

Ok! fatto! praticamente trovo la retta passante per il centro che attraversa il lato più lungo, poi traccio una perpendicolare a tale retta a partire dal punto del quale controllo la giacenza nel rettangolo, ora faccio distanza retta/punto. Se tale distanza è minore della metà del lato più corto e l'intersezione della retta passante per il centro con la perpendicolare giace tra le due rette su cui giacciono i lati più corti (si capisce controllando se l'intersezione tra la retta passante per il centro e la perpendicolare passante per il punto sta fra i punti di intersezione tra la retta passante per il centro e i lati più corti) il punto è all'interno del rettangolo.
Avatar utente
gabry
Starting Member
Starting Member
 
Messaggio: 6 di 8
Iscritto il: 04/06/2004, 11:16

Messaggioda mircoFN » 03/04/2006, 17:24

@gabry

i punti del rettangolo sono ordinati oppure no? Mi spiego meglio, quando fornisci i dati del rettangolo sai già quali sono i due lati che formano un angolo retto (e quindi basterebbero solo tre punti come dati) oppure i 4 punti sono forniti 'in disordine?

ciao
"La matematica non si capisce, alla matematica ci si abitua" von Neumann.
"The strength of a chain cannot be increased by improving the strongest links" D. Broek.
mircoFN
Cannot live without
Cannot live without
 
Messaggio: 138 di 3188
Iscritto il: 04/03/2006, 12:01

Messaggioda gabry » 27/04/2006, 13:38

Scusa, ma non serve sapere se i punti sono ordinati, in ogni caso se ne prendi 3 essi formeranno sempre un triangolo rettangolo, per capire in qual'e' l'angolo basta vedere quali sono i due piu' distanti tra loro (con la formula della distanza punto punto) che saranno i due appartenenti all'ipotenusa, e quindi prendere il rimanente. Poi a cosa ti serve quell'informazione?
Avatar utente
gabry
Starting Member
Starting Member
 
Messaggio: 7 di 8
Iscritto il: 04/06/2004, 11:16


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite