• Registrati
Benvenuto su codeinvaders.net la community italiana dedicata agli sviluppatori!
Puoi partecipare alle discussioni anche attraverso facebook, twitter e google+.
JS Day
  • google plus
  • facebook
  • twitter
Codeinvaders.net, domande e risposte per sviluppatori!
Partecipa a questa community rispettando tutti i suoi membri che, per il puro piacere di condividere, forniscono risposte e suggerimenti.
Classifica migliori utenti del mese 03/2017
  1. 4240 Punti

  2. 3980 Punti

  3. 3480 Punti

  4. Luca Rainone

    2400 Punti

I premi del mese
Posizione 1: Buono Amazon da 10 euro
Posizione 2: Sconto 40% su un libro O'Reilly

AS3 - Biliardo - Come conoscere tre punti d'intersezione in un'area rettangolare

immagine esplicativa

Salve a tutti,
sto cercando di realizzare in AIR con Flash CS6 un'applicazione desktop che aiuta un giocatore di biliardo a trovare la traiettoria corretta per colpire una palla ad esempio di calcio. S indica il punto dove è posizionata la palla bianca e T il punto della sponda colpita. Questi 2 punti sono noti, potrò spostarli all'interno del tavolo con drag & drop cambiando così le posizioni dei 3 punti mancanti P1, P2 e P3. Nell'immagine di esempio il punto di arrivo della palla partendo da S è il punto P3.
Il risultato finale sara un draw delle linee che uniscono i punti S,T,P1,P2 e P3.
Non sono ferratissimo in trigonometria, quindi chiedo un aiuto magari con del codice esplicativo.

Grazie anticipatamente a chi potrà aiutarmi

quesito posto 29 Marzo 2013 in actionscript da anonimo
   

3 Risposte

+1 voto

ciao,
Se vuoi che l'effetto sia realistico devi considerare che l'angolo in P1 è modificato dall'effetto rotazionale della palla acquisita durante l'urto in T. Quindi le due Beta non sono uguali.
Stessa cosa in P2.

Per cui la cosa più semplice è quella di farti prima l'engine fisico dove puoi scegliere di trascurare o meno gli effetti rotazionali, di impulso, attriti, i salti della palla ecc, e poi calcolare le traiettorie in base a quello.

Avevo fatto anni fa un biliardo in As2 non tropo ottimizzato (http://www.rain1.it/various/biliardo.html) e per ovviare al problema del calcolo della traiettoria ho fatto esattamente quanto detto: simulo un tiro e creo una sorta di palla fantasma.
Puoi usare lo stesso principio, ma anziché visualizzare la palla fantasma puoi disegnarne la traiettoria (in pratica la rendi invisibile e tieni traccia solo della traiettoria).

Questo perché nel biliardo ci sono tantissimi effetti, che calcolarli a priori sarebbe molto difficile. E' più facile appunto far fare questo lavoro allo stesso engine che poi crea l'animazione del tiro.

Se non vuoi crearti l'engine fisico, sappi che ce ne sono di già pronti. per esempio l'ottimo Box2D che è usato nei più importanti giochi (non vorrei dire una scemenza, ma anche Angry Birds ha usato box2d).

risposta inviata 29 Marzo 2013 da Luca Rainone (2,400 punti)
Engine fisico?
0 voti

Ciao Luca e grazie per la risposta.
Ho postato il quesito anche su un noto forum come da link
La risposta è stata molto dettagliata ma non conoscendo la classe Vector mi riesce difficile da capire, la studierò ;)

Altro link dove ho postato il quesito, ognuno con metodi diversi :)

Qualcuno ha voglia e tempo di tradurre in codice quello che lordofduct spiega nel suo post (link sopra)?

Grazie mille comunque a tutti.

risposta inviata 30 Marzo 2013 da anonimo
modificato 30 Marzo 2013 da anonimo
0 voti

Salve ragazzi,

non sono ancora riuscito a risolvere :(

Qualcuno riesce ad aiutarmi?

risposta inviata 9 Aprile 2013 da anonimo
Ciao.

Il problema che poni, nella configurazione che hai proposto, è piuttosto semplice dal punto di vista geometrico. In effetti (se si trascurano gli effetti della rotazione della palla) l'angolo che hai identificato con delta è congruente ad alpha (complementari dello stesso angolo alpha). Per questo motivo i triangoli rettangoli [S, T, Q] (dove Q è il piede della perpendicolare da S al lato AB), [T, A, P1], [P1, D, P2] e [P2, P3, C] sono tutti simili fra loro, ovvero i rapporti fra lati analoghi sono uguali. Questo risolve il tuo problema.

In realtà però il commento di Luca ti sta dicendo molto di più. In effetti a seconda della posizione del punto T è possibile che P1 finisca per trovarsi sul lato CD e via dicendo. Pertanto o tieni presente che esistono angoli limite che fanno passare da una configurazione all'altra oppure in effetti ti appoggi ad un engine fisico in cui specifichi i vincoli (i lati del tavolo).

Sper di esserti stato utile,

f
Puoi partecipare alle discussioni anche attraverso facebook e twitter.
...