iacoposk8 ha chiesto in Matematica e scienzeMatematica · 9 anni fa

geometria, calcolare uno scala oggetti?

Ciao a tutti! sto ultimando un programma dove si possono creare vari oggetti grafici (cerchi, quadrati, linee ecc..) e ora sto facendo in modo che si possano fare 3 opzioni ma su N oggetti.

Quindi, una volta che l'utente ha selezionato i vari oggetti dovrà poterli allargare/stringere, spostare e ruotare senza però perdere le distanze che ci sono fra i vari oggetti.

Quindi lo sposta è molto facile perchè sposterò gli oggetti tanto quanto si sposterà il mouse.

Per il ruota e lo scala è più complesso perchè se per esempio ruoto tutti gli oggetti sul loro stesso asse è sbagliato, dovrei ruotare gli oggetti tenendo come punto di centro la media dei centri degli oggetti, quindi gli oggetti dovranno spostarsi di tot x/y e ruotare non solo ruotare (per non perdere le distanze che ci sono fra loro) più saran vicini al centro della media dei centri più ruoteranno e si sposteranno meno (di x e y) e viceversa, stesso discorso per lo scala, mi sapete dire come faccio a ricavare questi dati? grazie :)

Aggiornamento:

@alcaciopo: son contento che ti piaccia il mio progetto tra l'altro si potranno importare anche immagini e fare animazione che se esportate si potranno utilizzare nelle pagine web.

Il punto 1 che hai elencato l'ho già sviluppato, ora devo fare il punto due, quello delle multi selezioni, lo sposta è molto semplice e l'ho già fatto il ruota e l'ingrandisci/diminuisci dimensione forme vanno fatti e hanno le problematiche che hai descritto tu, ovvero quello di ruotarle/scalarle in blocco senza perdere le proporzioni... sapresti darmi una dritta per risolvere il mio problema? grazie :)

Aggiornamento 2:

---------------------------------------------

Io mi sa che sono nel caso 3, in sostanza deve ragionare come i programmi di grafica.

Io ho tutti i dati che servono! ho le dimensioni di tutti gli oggetti base altezza o raggio, il centro di tutti gli oggetti e di conseguenza con una media ho anche il centro del blocco di oggetti selezionato... tu sapresti farmi un esempio di scala e ruota? perchè sto cercando col termine OMOTETIA (che è comunque la soluzione :)) ma faccio fatica, non sono matematico :D

Grazie ancora :)

Aggiornamento 3:

---------------------------------------------

scusa eh... ti rompo ancora, conta che io vari centri, centro del blocco, posizioni, raggi, lati ecc... ho tutto! ti vorrei chiedere se mi puoi fare un esempio senza le percentuali, ma in px o cm comunque unita di misura precise non percentuali e sia per il ruota che lo sposta... ti ringrazio ancora tanto :)

1 risposta

Classificazione
  • Anonimo
    9 anni fa
    Migliore risposta

    x

    interessante il tuo lavoro..

    non ho capito che tipo di rotazioni intendi fare... ci sono due possibilità

    [1] fai ruotare su se stesso un singolo oggetto.

    in questo caso l' oggetto deve avere tendenzialmente un CENTRO naturale.

    se è una crf/cerchio sarà il centro

    se è un rombo/quadrato/rettangolo sarà l' intersez delle due diagonali.

    ma già se fosse un TRAPEZIO... ci sarebbero dei seri problemi a determinarne un CENTRO.

    si può pensare al BARICENTRO... ma non è semplice calcolarlo!

    [2] altra alternativa e selezionare due o più oggetti... e farli ruotare solidarmente.

    in questo caso devi stabilire un CENTRO (nel mezzo delle figure selezionate)

    e far ruotare TUTTO IL BLOCCO mantenendo invariate le posizioni intercorrenti tra tutte le coppie di oggetti

    è come piazzarli su una pedana ruorante, ed iniziare a farla ruotare sul suo perno

    suo = della pedana... e NON degli oggetti !

    ....................................................................

    non è facile darti delle dritte supplementari...

    innanzitutto fraziona il problema in tante operazioni elementari.

    [a] una cosa è scalare (ingrandire/rimpicciolire) un oggetto.

    ed anche questa operazione viene bene per le figure che hanno un CENTRO geometrico.

    [b] se mi ingrandisci un gruppo di oggetti (anche solo due) ci sono due sub-possibilità

    pensa ad un cerchio assieme ad un quadrato.

    b1) li aumenti mantenendo inalterata la distanza fra i centri.

    e questa problematica assomiglia di più al trattamento dell' oggetto singolo

    b2) li aumenti entrambi... ed hai altri due sottocasi:

    b21- li mantieni alla stessa distanza fra i centri, ma devo forse controllare che non vadano a "sbattere" contro altri oggetti presenti nella scena

    b22 - scali proporzionalmente anche la distanza fra i centri... quindi gli oggetti si allargano distanziandosi, oppure si rimpiccioliscono avvicinandosi.

    3) se sono stati scelti più di due oggetti ( esempio 3 ) per farli distanziare reciprocamente occorre stabilire un CENTRO... che è l' unico punto che rimane fermo durante la operazione.

    Praticamente è il CENTRO della OMOTETIA che governa la operazione.

    ecco... se applichi le formule della omotetia risolvi egregiamente il problema.

    però devi anche qui esaminare le varie possibilità...

    cerchio: muovi il centro ed allarghi il raggio

    quadrato: muovi il centro. e allarghi i 4 vertici e ricomponi la figura

    perché ogni figura dovrebbe essere composta di alcune operazioni/componenti fondamentali

    è impossibile pensare ad una figura come composta da 10.000 punti...

    altre idee non me ne vengono... ricorda di frazionare il problema in tanti sotto-problemi elementari.

    te li risolvi ad uno ad uno, come se fossero tante piccole sub-routine, e poi le assembli e le richiami quando e dove necessario per formare la mega-operazione complessa.

    ...................................

    la OMOTETIA è una cosa abbastanza semplice.

    Allora facciamo un esempio con una CIRCONFERENZA... analogam farai le altre figure

    . devi avere ben definiti (con opportune coordinate per esempio)

    1- il CENTRO O che rimane fermo, centro della Omotetia

    2- il CENTRO C della circonferenza..

    3- il RAGGIO R della crf

    4- supponi di fare un incremento di x% ... dove x stabilisci se è 1 o 2 o 5 ... non importa

    5- Calcoli la distanza OC ante operazione . . sia D

    6- calcoli la RETTA ed il verso che vanno da O verso C (segmento orientato)

    7- calcoli D + x% ossia D ( 1 + x )/100

    8- ottieni partendo da O il nuovo Centro C1

    9- calcoli R + x% . . ossia R ( 1 + x )/100 ossia il nuovo raggio R1

    10- Disegni la nuova crf con raggio in C1 e raggio R1 dopo aver cancellato la vecchia.

    questo algoritmo ti allarga il raggio di x% e te lo allontana contestualmente dal centro della omotetia del x%

    nel caso di quadrilatero... devi ripetere il punto 9 per i quattro vertici

    e poi congiungere ordinatamente per ottenere il nuovo bordo della figura.

    ultima notazione... siccome ogni volta che fai un ingrandimento introduci dei piccoli errori dovuti agli arrotondamenti... CONSERVA SEMPRE i dati originali

    per fare un aumento del 5% e poi uno successivo del 5% ...

    farai meglio il secondo aumento calcolando +11% sulla figura originale.

    ma qui stiamo proprio proprio spaccando il c.lo ai passeri !

    • Accedi per rispondere alle risposte
Altre domande? Fai una domanda e ottieni le risposte che cerchi.