2010-04-02 5 views
7

Sto usando un metodo di avvicinamento del segmento al segmento più vicino che emetterà la distanza più vicina tra due segmenti di lunghezza. Ogni segmento corrisponde all'origine e alla destinazione dell'oggetto sfera. La velocità è semplicemente da un punto all'altro.Domanda più vicina per i responsabili di matematica/fisica

L'avvicinamento può avere successo anche quando non ci sarà una vera collisione. Quindi, attualmente sto usando un metodo a 10 passi e calcolando la distanza tra 2 sfere mentre si muovono lungo i due segmenti. Quindi, fondamentalmente la lunghezza di ogni segmento è la traversa dell'oggetto nella fase fisica, e il raggio è il raggio degli oggetti. Facendo un passo, posso dire dove si scontrano e se si scontrano (Sort of; per la MAGGIOR PARTE).

Ho la sensazione che potrebbe esserci qualcosa di meglio. Mentre io credo che sia necessaria la prima chiamata di approccio più vicino, penso che il metodo immediatamente successivo sia un TAD debole. Qualcuno mi può aiutare? Posso illustrarlo se necessario.

Grazie mille! alt text http://img444.yfrog.com/img444/6692/caquestion.png

+0

Ma non è una domanda __programming__ ... _o –

+0

L'approccio più vicino è un algoritmo. È molto mio amico. – Kyle

+0

Potrebbe essere ... se sta lavorando a un motore fisico. –

risposta

3

(non so come inviare la grafica;. Portare con me)

Va bene, abbiamo due sfere con raggi R1 e R2, a partire da posizioni X1 e X2, si muovono con velocità V1 e V2 (X e V sono vettori).

La velocità della sfera 1 come visto dalla sfera 2 è

V = V1-V2 

e la sua direzione è

v = V/|V| 

La distanza sfera 1 deve percorrere (nell'ambito del settore 2) per avvicinamento è

s = Xv 

E se X è la separazione iniziale, la distanza dell'approccio più vicino è

h = |X - Xv| 

Questo è dove la grafica sarebbe di aiuto. Se h> r1 + r2, non ci sarà collisione. Supponiamo che h < r1 + r2. Al momento della collisione, i due centri della sfera e il punto dell'approccio più vicino formeranno un triangolo rettangolo.La distanza dal centro di Sphere 1 fino al punto di massimo avvicinamento è

u = sqrt((r1 + r2)^2 - h^2) 

Così la distanza sfera 1 ha viaggiato è

s - u 

Ora basta vedere se sfera 1 viaggia così lontano nel dato intervallo. Se è così, allora sai esattamente quando e dove erano le sfere (devi tornare indietro dalla cornice della sfera 2, ma è abbastanza facile). In caso contrario, non c'è collisione.

+0

Grazie, Beta! Immagino di non essere sicuro di cosa rappresenti X in Xv e quale operazione stai facendo. Quindi, credo di essere bloccato su quella particolare parte. – Kyle

+0

Scusa, X è la separazione iniziale delle sfere (X2 - X1), v è un vettore unitario nella direzione di V, e quando scrivo due vettori insieme come Xv, intendo il prodotto punto. – Beta

3

L'avvicinamento più vicino può essere eseguito senza la simulazione del tempo se la funzione di posizione è invertibile ed esplicita.

  1. Selezionare un percorso e un oggetto.
  2. Trova il punto sul percorso in cui i due percorsi sono più vicini. Se il tempo ha dei limiti (ad esempio i percorsi sono segmenti di linea), ignora i limiti in questo passaggio.
  3. Trova l'ora in cui l'oggetto si trova nel punto del passaggio precedente.
  4. Se il tempo ha limiti, limitare il tempo selezionato dai limiti.
  5. Calcola la posizione dell'altro oggetto alla volta dal passaggio precedente.
  6. Verificare se gli oggetti si sovrappongono.

Questo non funzionerà per tutti i percorsi (ad esempio alcuni cubici), ma dovrebbe funzionare per i percorsi lineari.

+0

Nel caso in cui due oggetti si muovano in due segmenti che formano una sorta di forma a "V", con i loro originari nella parte superiore della V, il loro punto di collisione effettivo non sarebbe l'approccio più vicino, sarebbe in realtà prima di esso a causa dei loro raggi. – Kyle

+0

Quindi, a causa di ciò, uso semplicemente la CA come controllo booleano per eseguire il sotto-passaggio. – Kyle

+0

@Kyle: per i segmenti di linea anziché le righe, è possibile trovare il punto più vicino su uno di essi all'altro. – outis