Motore fisico
Inviato: 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ò:
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...)
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};
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...)