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

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...)

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti