Algoritmo rettangolo piano cartesiano

Messaggioda z3r01993 » 24/06/2023, 13:12

Buongiorno,
lavoro come programmatore e sto facendo un programma che deve caricare dei layers su una mappa di google maps.
Premetto che non penso sia questa la sezione corretta essendo una domanda di matematica, ma non sapevo esattamente dove inserirla lol
Attualmente i files sono di diversi MB e alcuni clienti dicono che su telefoni un po' antiquati il caricamento e' lento, pertanto ho la necessita' di scrivere uno script che mi suddivida automaticamente i files in vari settori con coordinate determinate nel filename per poter cosi' caricare dinamicamente i files corrispondenti ogni qualvolta l'utente effettui un movimento direzionale o uno zoom in/out maggiore di un certo valore. (parsare i files dinamicamente sarebbe una follia)

Sostanzialmente per suddividere in settori di coordinate l'area che mi interessa devo inscriverla in un rettangolo o quadrato che sia e mi servirebbe sapere se il procedimento che sto effettuando e' corretto perche' sono robe che avevo fatto anni fa e anni fa a riaprire gli appunti di matematica mi viene un po' male quindi sono andato a ricordi.

Vabbe' in pratica sostanzialmente prendo le coordinate ai vertici estremi dell'area per ogni lato del rettangolo, successivamente devo tracciare una retta passante per quel punto che sia perpendicolare all'altra retta (tipo la retta passante per il punto A all'estrema sinistra deve essere perpendicolare alla retta passante per il punto B in alto).

Per fare questo mi sono riguardato i fasci di rette e se non ricordo male devo utilizzare un fascio proprio:
\(\displaystyle y - y1 = m(x - x1) \)

Poi mi ricordo che la condizione di perpendicolarita' e':
\(\displaystyle m1 = -1/m2 \)

Per trovare quindi il punto d'incontro in cui le due rette sono perpendicolari ho messo a sistema l'equazione del fascio di rette per il punto A, l'equazione del fascio di rette per il punto B e la condizione di perpendicolarita'.
E' corretto?

Ottenendo tipo:
\(\displaystyle y - y1 = m1(x - x1) \)
\(\displaystyle y - y2 = m2(x - x2) \)
\(\displaystyle m1 = -1/m2 \)

Per risolvere il sistema ho sostituito nella prima equazione m1 con il corrispettivo valore -1/m2, quindi mi sono ricavato il valore di m2 sulla prima equazione e sulla seconda (spero di non aver fatto castronerie lol)
\(\displaystyle m2 = (-x + x1) / (y - y1) \)
\(\displaystyle m2 = (y - y2) / (x - x2) \)

E' corretto? ):

Poi cosa faccio? Sostituisco il valore di m2 nella prima con il valore di m2 nella seconda?
In questo caso mi verrebbe fuori un'equazione di secondo grado a 2 incognite e' giusto?

Sono sicuro al 99% di aver sbagliato, anche perche' ho avuto modo di dedicarci solo un'oretta ieri durante lavoro per cercare le info ecc.

Gentilmente se mi potete dare una dritta senza scrivermi la soluzione cosi' ci metto meno a cercare le info che mi servono mi fareste un enorme piacere!

Grazie (:
z3r01993
Starting Member
Starting Member
 
Messaggio: 1 di 3
Iscritto il: 24/06/2023, 12:45

Re: Algoritmo rettangolo piano cartesiano

Messaggioda utente__medio » 24/06/2023, 15:09

Ciao, non so se sono in grado di aiutarti, ma giusto per capire ipotizziamo che l'area totale sia costituita da 1001*1501 pixel (e quindi i vertici del rettangolo saranno i pixel di coordinate [0;0], [0;1000], [1500;1000] e [1500;0]). A questo punto cosa ti servirebbe calcolare di preciso? Devi suddividere l'area totale in più "sottoaree" oppure devi ottenere le coordinate dei vertici della "sottoarea" centrata in un determinato pixel? Potresti fare un esempio pratico?
"Ci abbaiano, Sancho; segno che stiamo cavalcando!"
utente__medio
Junior Member
Junior Member
 
Messaggio: 296 di 394
Iscritto il: 02/11/2021, 12:48
Località: Draghistan

Re: Algoritmo rettangolo piano cartesiano

Messaggioda apatriarca » 25/06/2023, 00:47

In effetti non è molto chiaro che cosa tu stia esattamente facendo con quei calcoli e quali siano esattamente i tuoi input.

Per prima cosa il tuo fascio non è in grado di rappresentare tutte le possibili rette in quanto non contiene la retta \(y_1 = x.\) La seguente formula contiene tutte le possibili rette del fascio:
\[ a(x - x_1) + b(y - y_1) = 0. \]
Nota che se moltiplichiamo \(a\) e \(b\) per lo stesso numero otteniamo la stessa retta e quindi la rappresentazione non è unica (ma non è importante). Hai che il tuo valore \(m_1 = -a/b.\) Se \( c(x - x_2) + d(y - y_2) = 0 \) è un'altra retta la condizione di perpendicolarità in questo caso è \( ac + bd = 0. \) Quindi possiamo ad esempio prendere \( b(x - x_2) - a(y - y_2) = 0.\) Tutte gli altri valori di \(c\) e \(d\) sono in effetti ottenuti moltiplicando questi valori per un valore qualsiasi diverso da zero. Hai che \(m_2 = - b/(-a) = b/a = - 1/m_1\) come nei tuoi calcoli.

Per trovare l'intersezione devi risolvere il sistema lineare:
\[
\begin{cases}
ax + by = ax_1 + by_1 \\
bx - ay = bx_2 - ay_2
\end{cases}
\]
La soluzione dovrebbe essere (ho fatto i calcoli a mano di fretta per cui potrebbero esserci errori):
Testo nascosto, fai click qui per vederlo
\[
x = \frac{a^2x_1 + aby_1 + b^2x_2 - aby_2}{a^2 + b^2} = \frac{m_1^2x_1 - m_1y_1 + x_2 + m_1y_2}{1 + m_1^2} \\
y = \frac{abx_1 + b^2y_1 - abx_2 + a^2y_2)}{a^2 + b^2} = \frac{y_1 - m_1x_1 + m_1x_2 + m_1^2y_2}{1 + m_1^2}
\]

Nota che qui non c'è nulla da risolvere in quanto tutti i valori sono conosciuti. Il tuo procedimento era corretto ma dovevi ancora fare l'ultimo passaggio che hai descritto solo a parole. Ti conviene tuttavia usare \(a\) e \(b\) invece che \(m_1\) perché la retta perpendicolare è in questo caso sempre ben definita e non ci sono problemi con divisioni per numeri piccoli.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5763 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Algoritmo rettangolo piano cartesiano

Messaggioda z3r01993 » 26/06/2023, 08:36

apatriarca ha scritto:In effetti non è molto chiaro che cosa tu stia esattamente facendo con quei calcoli e quali siano esattamente i tuoi input.

Per prima cosa il tuo fascio non è in grado di rappresentare tutte le possibili rette in quanto non contiene la retta \(y_1 = x.\) La seguente formula contiene tutte le possibili rette del fascio:
\[ a(x - x_1) + b(y - y_1) = 0. \]
Nota che se moltiplichiamo \(a\) e \(b\) per lo stesso numero otteniamo la stessa retta e quindi la rappresentazione non è unica (ma non è importante). Hai che il tuo valore \(m_1 = -a/b.\) Se \( c(x - x_2) + d(y - y_2) = 0 \) è un'altra retta la condizione di perpendicolarità in questo caso è \( ac + bd = 0. \) Quindi possiamo ad esempio prendere \( b(x - x_2) - a(y - y_2) = 0.\) Tutte gli altri valori di \(c\) e \(d\) sono in effetti ottenuti moltiplicando questi valori per un valore qualsiasi diverso da zero. Hai che \(m_2 = - b/(-a) = b/a = - 1/m_1\) come nei tuoi calcoli.

Per trovare l'intersezione devi risolvere il sistema lineare:
\[
\begin{cases}
ax + by = ax_1 + by_1 \\
bx - ay = bx_2 - ay_2
\end{cases}
\]
La soluzione dovrebbe essere (ho fatto i calcoli a mano di fretta per cui potrebbero esserci errori):
Testo nascosto, fai click qui per vederlo
\[
x = \frac{a^2x_1 + aby_1 + b^2x_2 - aby_2}{a^2 + b^2} = \frac{m_1^2x_1 - m_1y_1 + x_2 + m_1y_2}{1 + m_1^2} \\
y = \frac{abx_1 + b^2y_1 - abx_2 + a^2y_2)}{a^2 + b^2} = \frac{y_1 - m_1x_1 + m_1x_2 + m_1^2y_2}{1 + m_1^2}
\]

Nota che qui non c'è nulla da risolvere in quanto tutti i valori sono conosciuti. Il tuo procedimento era corretto ma dovevi ancora fare l'ultimo passaggio che hai descritto solo a parole. Ti conviene tuttavia usare \(a\) e \(b\) invece che \(m_1\) perché la retta perpendicolare è in questo caso sempre ben definita e non ci sono problemi con divisioni per numeri piccoli.


Ok grazie mille per la risposta, questa sera o domani sera dopo lavoro provo a vedere di buttare giù lo script.
z3r01993
Starting Member
Starting Member
 
Messaggio: 2 di 3
Iscritto il: 24/06/2023, 12:45

Re: Algoritmo rettangolo piano cartesiano

Messaggioda z3r01993 » 26/06/2023, 08:50

apatriarca ha scritto:Nota che qui non c'è nulla da risolvere in quanto tutti i valori sono conosciuti. Il tuo procedimento era corretto ma dovevi ancora fare l'ultimo passaggio che hai descritto solo a parole. Ti conviene tuttavia usare \(a\) e \(b\) invece che \(m_1\) perché la retta perpendicolare è in questo caso sempre ben definita e non ci sono problemi con divisioni per numeri piccoli.


Mi scusi un'ultima domanda, lei scrive che i valori sono tutti conosciuti perché il mio coefficiente angolare m1 corrisponde allo scostamento lungo x rispetto al piano cartesiano essendo la mia retta parallela alla retta delle ordinate all'origine, corretto?
Quindi io avendo il punto A (x1, y1) il coefficiente angolare corrisponderá a x1.

Stessa cosa per m2 solo che è parallela all'asse delle ascisse pertanto avendo il punto B(x2, y2) il suo coefficiente angolare m2 sarà y2.

È corretto?

Grazie mille e buona giornata
z3r01993
Starting Member
Starting Member
 
Messaggio: 3 di 3
Iscritto il: 24/06/2023, 12:45

Re: Algoritmo rettangolo piano cartesiano

Messaggioda apatriarca » 26/06/2023, 11:45

No, il coefficiente angolare corrisponde a \(\Delta y/\Delta x\) cioè quanto cambia \(y\) dato un cambio di un unità in \(x\). In altre parole se ci spostiamo lungo la retta da \(x_1\) a \(x_1 + 1\) ci sposteremo da \(y_1\) a \(y_1 + m_1\).

Tuttavia se vuoi muoverti lungo gli assi allora le rette sono \(x = x_1\) e \(y = y_2\) e come vedi le formule con il coefficiente angolare non aiutano (la prima retta non è rappresentabile--ha coefficiente angolare "infinito"). Tuttavia non è necessario fare alcun calcolo. L'intersezione è chiaramente \((x_1, y_2)\).

In generale, se \((x_i, y_i)\) è un insieme di punti di cui vuoi calcolare il rettangolo che li contiene, allora dati
\[
x_{\min} = \min_i x_i, \quad y_{\min} = \min_i y_i, \\
x_{\max} = \max_i x_i, \quad y_{\max} = \max_i y_i,
\]
i quattro vertici del rettangolo in senso antiorario saranno \((x_{\min}, y_{\min}),\) \((x_{\max}, y_{\min}),\) \((x_{\max}, y_{\max}),\) \((x_{\min}, y_{\max}).\)
apatriarca
Moderatore
Moderatore
 
Messaggio: 5764 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Algoritmo rettangolo piano cartesiano

Messaggioda utente__medio » 26/06/2023, 16:49

Il mio precedente post l'ha proprio ignorato! :-D

Comunque resto dell'idea che per un aiuto più pertinente dovresti spiegare meglio i contorni del problema.
"Ci abbaiano, Sancho; segno che stiamo cavalcando!"
utente__medio
Junior Member
Junior Member
 
Messaggio: 297 di 394
Iscritto il: 02/11/2021, 12:48
Località: Draghistan


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite