Log in

View Full Version : Help! problema programmazione



Shirogane
3rd December 2010, 14:40
In realtà più che un problema di programmazione è un problema riguardante il metodo che sto usando che inizio a pensare sia sbagliato di peso.

Sto scrivendo alcuni metodi in c# che dovremo poi riciclare sulla tesi, uno di questi metodi che pensavo fosse banale invece mi sta dando problemi.
Nel nostro mondo virtuale gli oggetti sono un insieme di celle quadrate composte da 4 segmenti, un edificio ad esempio di forma quadrata per banalizzare è quindi costituito da un'array multidimensionale di oggetti cella con tante righe quante colonne.

Ora voglio implementare un metodo che consenta di ruotare tale edificio sul proprio baricentro di un certo numero di gradi per poter testare successivamente l'applicazione di varie forze fisiche, per attuare tale rotazione effettuo il calcolo del baricentro dell'edificio (che sono sicuro sia esatto) poi successivamente esprimo ogni segmento (che abbiamo definito come interpolazione di 2 punti estremi A e B) di cui è composta ogni singola cella in funzione delle coordinate del baricentro (cambio quindi sistema di riferimento), ad esempio facendo Xpunto-Xbaricentro=Xnuova.
Fatto ciò applico una matrice di rototraslazione cosi costituita

| cos(alpha) -sen(alpha) | | Xnuova | |Xrisultante |
| sen(alpha) cos(alpha) | * | Ynuova | = | Yrisultate |

(* prodotto tra matrici, alpha numero di gradi di cui voglio ruotare)

al risultato poi risommo le coordinate del baricentro per ritornare in coordinate assolute e opero cosi per ogni coppia di punti A e B (quello sopra è il procedimento per un solo ipotetico punto A) ritraccio ogni segmento con le coordinate dei punti estremi aggiornate e dovrebbero essere ruotati del numero di gradi forniti rispetto al baricentro dell'edificio.

Ora questo metodo funziona solo per alcuni valori tipo se inserisco 45° ruota l'edificio correttamente, per altri valori invece lo ruota sempre attorno al baricentro ma sembra "tirato" tutto da un'lato.

Il problema è + che altro matematico, il codice dovrebbe essere giusto al 90% quindi probabilmente non tengo in considerazione qualcosa nel metodo che applico...qualcuno ne capisce qualcosa e può aiutarmi? :D
io ho finito le idee

Hador
3rd December 2010, 14:47
fai debuuugggggghhhh
:sneer:

fatti i calcoli a mano e tira su dei casi di test veloci per confrontare i valori ottenuti. Almeno capisci subito se l'errore è di programmazione o concettuale.

se i valori combaciano faili la metodologia, se non combaciano debugga duro fino a che non capisci dove sta il problema.

Amiag
3rd December 2010, 14:48
il metodo mi sembra corretto ...

mi pare piu facile che ci sia qualche bug nel codice, sei sicuro che sia tutto corretto li ? ad esempio se da qualche parte hai scambiato seno con coseno o viceversa si potrebbe avere sto effetto (a 45 gradi seno = coseno)

Shirogane
3rd December 2010, 14:53
il metodo mi sembra corretto ...

mi pare piu facile che ci sia qualche bug nel codice, sei sicuro che sia tutto corretto li ? ad esempio se da qualche parte hai scambiato seno con coseno o viceversa si potrebbe avere sto effetto (a 45 gradi seno = coseno)

Richiamo sempre la stessa matrice quindi potrebbe essere come dici, potrebbe essere che alcune rotazioni siano corrette per quello :D

Alkabar
3rd December 2010, 15:13
In realtà più che un problema di programmazione è un problema riguardante il metodo che sto usando che inizio a pensare sia sbagliato di peso.

Sto scrivendo alcuni metodi in c# che dovremo poi riciclare sulla tesi, uno di questi metodi che pensavo fosse banale invece mi sta dando problemi.
Nel nostro mondo virtuale gli oggetti sono un insieme di celle quadrate composte da 4 segmenti, un edificio ad esempio di forma quadrata per banalizzare è quindi costituito da un'array multidimensionale di oggetti cella con tante righe quante colonne.

Ora voglio implementare un metodo che consenta di ruotare tale edificio sul proprio baricentro di un certo numero di gradi per poter testare successivamente l'applicazione di varie forze fisiche, per attuare tale rotazione effettuo il calcolo del baricentro dell'edificio (che sono sicuro sia esatto) poi successivamente esprimo ogni segmento (che abbiamo definito come interpolazione di 2 punti estremi A e B) di cui è composta ogni singola cella in funzione delle coordinate del baricentro (cambio quindi sistema di riferimento), ad esempio facendo Xpunto-Xbaricentro=Xnuova.
Fatto ciò applico una matrice di rototraslazione cosi costituita

| cos(alpha) -sen(alpha) | | Xnuova | |Xrisultante |
| sen(alpha) cos(alpha) | * | Ynuova | = | Yrisultate |

(* prodotto tra matrici, alpha numero di gradi di cui voglio ruotare)

al risultato poi risommo le coordinate del baricentro per ritornare in coordinate assolute e opero cosi per ogni coppia di punti A e B (quello sopra è il procedimento per un solo ipotetico punto A) ritraccio ogni segmento con le coordinate dei punti estremi aggiornate e dovrebbero essere ruotati del numero di gradi forniti rispetto al baricentro dell'edificio.

Ora questo metodo funziona solo per alcuni valori tipo se inserisco 45° ruota l'edificio correttamente, per altri valori invece lo ruota sempre attorno al baricentro ma sembra "tirato" tutto da un'lato.

Il problema è + che altro matematico, il codice dovrebbe essere giusto al 90% quindi probabilmente non tengo in considerazione qualcosa nel metodo che applico...qualcuno ne capisce qualcosa e può aiutarmi? :D
io ho finito le idee

Metti il codice qua.

Shirogane
3rd December 2010, 15:19
Ho risolto lol...alla fine sono le cose + semplici e stupide......mi darei fuoco al pensiero del tempo che ci ho perso, c'era un punto che lavorava in radianti e non in gradi e sfasava tutto dove non era 0 ...sono un idiota :D

Hador
3rd December 2010, 15:23
Ho risolto lol...alla fine sono le cose + semplici e stupide......mi darei fuoco al pensiero del tempo che ci ho perso, c'era un punto che lavorava in radianti e non in gradi e sfasava tutto dove non era 0 ...sono un idiota :Dbhe ma i problemi sono sempre stupidi :nod:

ah ma poi siamo in life? lol