Motore fisico

In questa zona vengono raccolte le discussioni che riguardano lo sviluppo di nuovi progetti per ARM e per Re-Volt

Moderatore: Michelangelo

Rispondi
Avatar utente
minibond
Messaggi: 1725
Iscritto il: lun 30 lug 2007, 15:00
Località: Roma
Contatta:

Motore fisico

Messaggio da minibond » ven 12 nov 2010, 20:00

Allora... finalmente credo di aver completato la parte bidimensionale della geometria... e finalmente mi sono deciso a creare questo topic!

Tanto per cominciare, vi propongo alcuni problemi:

per la geometria tridimensionale, i solidi verranno definiti tramite un insieme di facce di forma variabile (non obbligatoriamente triangoli o quadrilateri).

Al momento io ho la possibilità di creare una qualsiasi forma geometrica piana nello spazio definendo i punti dei vertici in un ordine definito (come quando disegnando una figura, si scrivono le lettere A, B, C, ...); in questo modo una figura geometrica qualsiasi può essere definita in un modo [più o meno] univoco.

Esempio: ho un quadrato formato dai punti A(2;2;2), B(2;4;2), C(2;2;4), D(2;4;4) (Se lo spazio vi crea difficoltà, eliminate il primo 2 nelle coordinate di ogni punto); questi verranno memorizzati secondo l'ordine ABCD.
Viceversa, se voglio ottenere una specie di clessidra, basta invertire due punti non opposti, per esempio C e D, così da ottenere la figura ABDC, che è diversa dalla figura ABCD.
(Automaticamente l'ultimo punto (D nel quadrato, C nella clessidra) si congiungerà con il primo)


Il mio problema è il seguente: come si può definire una qualsiasi figura geometrica solida (prisma, piramide, ecc.) senza avere errori nel tracciare la figura (come mancanza o sovrabbondanza di segmenti) e senza che i punti definiti siano ridondanti (cioè senza definire un punto più di una volta)?

So che può sembrare difficile, ma è abbastanza importante per il motore fisico...
Potrebbe sembrare anche un po' inutile o superfluo, ma ho in mente una mezza idea per trovare aree e collisioni...

Poi avrei anche un altro piccolo problemino con le unità di misura (a quanti punti del computer può equivalere un metro?), ma questo è un problema secondario ed è risolvibile anche tra molto tempo...

EDIT:
Allora, forse ho trovato una soluzione: potrei definire, oltre ad una matrice di Punti, che saranno i vertici della figura, anche una matrice di matrici di int, che determineranno i collegamenti tra i vari punti;
ad esempio, se ho una piramide a base quadrata, avrò:

Codice: Seleziona tutto

// I punti della piramide sono 5
Point[] Vertex = new Point[5];
// Tutti i punti sono collegati al vertice della piramide, mentre i vertici di base sono collegati solamente con quelli adiacenti
int[][] VertexLinks = new int[5][];
// Vertice della punta
VertexLinks[0] = new int[4] {1, 2, 3, 4};
// Vertici di base
VertexLinks[1] = new int[3] {0, 4, 2};
VertexLinks[2] = new int[3] {0, 1, 3};
VertexLinks[3] = new int[3] {0, 2, 4};
VertexLinks[4] = new int[3] {0, 1, 3};
Immagine
L'unico problema è che si avranno delle "doppie connessioni" tra alcuni vertici, ma è comunque una soluzione accettabile.
Anzi, ora che ci penso, il problema delle doppie connessioni potrebbe anche rivelarsi una cosa utile (anche se non so in che modo...)
I bonus sono l'essenza di Re-Volt.
LAVORI: { In Progetto - In Esecuzione - Completato - In Pausa - Prossima Aggiunta }

Versione firma: 4.2.16 - Ultimo aggiornamento: 28/9/2014 15:55

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite