Thread obsoleto Curiosità e funzioni matematiche

blablablabla31

Nuovo utente
Autore del topic
24 Ottobre 2012
12
0
Miglior risposta
0
Salve a tutti ragazzi. Oggi volevo fare alcune cosette irrisolte tramite la classe Graphics prima di metterle in XNA e finire, finalmente, il mio primo gioco.
Dopo tante e tante prove consultando anche manuali di funzioni matematiche non sono riuscito a risolvere i problemi e voi siete la mia ultima carta da giocare.
Vi spiego la mia situazione e ciò che vorrei fare,premetto che non sono un mago nella matematica tantomeno non conosco al 100% tutti i nomi blasfemi delle funzioni nella classe Math:

-Vorrei far proseguire ad una immagine una linea retta(immaginaria) dal punto A(X,Y) al punto B(X,Y). Conoscendo questi due punti come posso farlo? L'andamento dell'oggetto dovrà essere rettilineo e costante, non mi resta difficile farlo muovere, è trovare punti nel piano dove si deve muovere il problema.
-Data una immagine di angolazione 0(quindi normale) e conoscendo nel piano il punto,A(X,Y), in cui essa è situata e conoscendo un ulteriore punto nel piano, B(X,Y), come posso ricavare l'angolazione per la quale il verso dell'immagine sia rivolto verso il punto B? Ho provato ad immaginare un triangolo rettangolo avente i due punti come apici degli angoli(non l'angolo di 90°) quindi calcolando i due cateti e l'ipotenusa applicare la regola del Seno e Coseno che naturalmente a scuola non mi hanno spiegato (o forse non ricordo?).

Ringrazio già in anticipo e mi scuso per i miei quesiti che magari potranno avere una risposta semplicissima. (Forse il titolo può non essere appropiato non sapendo cosa mettere.)
@System32
 
Ultima modifica:
Riferimento: Curiosità e funzioni matematiche

Per quanto riguarda la retta devi usare il cosiddetto "teorema" ( non è un vero e proprio teorema ) chiamato retta passante per due punti :
Perfavore, Entra oppure Registrati per vedere i Link!

NB: Lascia perdere il fascio di rette, non ti interessa.
Per il secondo quesito, ovvero quello dell'angolo, non sono in grado di aiutarti perché non capisco cosa intendi.
 
Riferimento: Curiosità e funzioni matematiche

Per quanto riguarda la retta devi usare il cosiddetto "teorema" ( non è un vero e proprio teorema ) chiamato retta passante per due punti :
Perfavore, Entra oppure Registrati per vedere i Link!

NB: Lascia perdere il fascio di rette, non ti interessa.
Per il secondo quesito, ovvero quello dell'angolo, non sono in grado di aiutarti perché non capisco cosa intendi.
Grazie mille, appena torno nel mio PC abituale provo immediatamente il metodo da te posto. Cerco di spiegarti dettagliatamente il 2 quesito:
Ho una immagine disegnata sul piano sul punto A(X,Y) con una faccia(mettiamola così) rivolta verso l'alto. Ho un altro punto nel piano chiamato B(X,Y). B sarebbe la direzione che l'immagine dovrebbe guardare, quindi facendola roteare di tot gradi(questo è appunto ciò che voglio trovare). Quindi come faccio a trovare l'ampiezza espressa in gradi di un angolo in modo che l'immagine si ruota fino a "far guardare" il punto B?

Grazie mille :emoji_slight_smile:
 
Riferimento: Curiosità e funzioni matematiche

Grazie mille, appena torno nel mio PC abituale provo immediatamente il metodo da te posto. Cerco di spiegarti dettagliatamente il 2 quesito:
Ho una immagine disegnata sul piano sul punto A(X,Y) con una faccia(mettiamola così) rivolta verso l'alto. Ho un altro punto nel piano chiamato B(X,Y). B sarebbe la direzione che l'immagine dovrebbe guardare, quindi facendola roteare di tot gradi(questo è appunto ciò che voglio trovare). Quindi come faccio a trovare l'ampiezza espressa in gradi di un angolo in modo che l'immagine si ruota fino a "far guardare" il punto B?

Grazie mille :emoji_slight_smile:

Ok adesso l'ho capito meglio però non sono lo stesso in grado di aiutarti, non mi risulta che in quello che ho studiato in matematica ci sia qualcosa che permette di fare questo.
 
Riferimento: Curiosità e funzioni matematiche

Ok adesso l'ho capito meglio però non sono lo stesso in grado di aiutarti, non mi risulta che in quello che ho studiato in matematica ci sia qualcosa che permette di fare questo.
Io ho fatto questo ragionamento per il secondo quesito, ti allestisco tutto con immagini fatte da me per rendere meglio l'idea e magari ragionarci su insieme(questo utilizzo di logica avanzata e l'atteggiamento di sfida che assumono questi problemi mi hanno sempre appassionato).
Abbiamo un piano cartesiano e 2 punti chiamati A e B come nell'immagine (perdonami per la mia scarsa bravura nell'utilizzare Paint):
20u6913.jpg

Dopo di che immaginiamo che i due punti siano l'apici degli angoli di un triangolo rettangolo dove conosciamo tutti i suoi lati come nell'immagine:
34yuzpg.jpg

Quindi per trovare l'ampiezza ci basa trovare l'angolo che come vertice ha il punto A e facendo una breve ricerca nel web ho trovato che si può trovare tramite una legge del seno e coseno dove io non ho nessuna esperienza non avendola mai studiata. Credo che una volta trovato l'ampiezza dell'angolo basti dividere il quadrante in 4 piani(90,180,270,360) e fare quadrante-(ampiezza dell'angolo). Quindi roteare l'immagine(metodo che già so fare) con il risultato.
Spero di essere stato più che esaustivo nell'esprimermi e che possiamo ragionarci insieme, magari mi basterebbe solo la legge dei coseni e seni.

Grazie mille :emoji_slight_smile:
 
Riferimento: Curiosità e funzioni matematiche

Io ho fatto questo ragionamento per il secondo quesito, ti allestisco tutto con immagini fatte da me per rendere meglio l'idea e magari ragionarci su insieme(questo utilizzo di logica avanzata e l'atteggiamento di sfida che assumono questi problemi mi hanno sempre appassionato).
Abbiamo un piano cartesiano e 2 punti chiamati A e B come nell'immagine (perdonami per la mia scarsa bravura nell'utilizzare Paint):
20u6913.jpg

Dopo di che immaginiamo che i due punti siano l'apici degli angoli di un triangolo rettangolo dove conosciamo tutti i suoi lati come nell'immagine:
34yuzpg.jpg

Quindi per trovare l'ampiezza ci basa trovare l'angolo che come vertice ha il punto A e facendo una breve ricerca nel web ho trovato che si può trovare tramite una legge del seno e coseno dove io non ho nessuna esperienza non avendola mai studiata. Credo che una volta trovato l'ampiezza dell'angolo basti dividere il quadrante in 4 piani(90,180,270,360) e fare quadrante-(ampiezza dell'angolo). Quindi roteare l'immagine(metodo che già so fare) con il risultato.
Spero di essere stato più che esaustivo nell'esprimermi e che possiamo ragionarci insieme, magari mi basterebbe solo la legge dei coseni e seni.

Grazie mille :emoji_slight_smile:

Sì come ragionamento fila. Avevo pensato al teorema del seno e del coseno ma non ero sicuro potesse servire anche perché non penso che tu lo abbia studiato. Non è una cosa molto facile da capire ( bisognerebbe avere un minimo di basi di trigonometria ) però se vuoi ti linko i due teoremi :

Perfavore, Entra oppure Registrati per vedere i Link!

Perfavore, Entra oppure Registrati per vedere i Link!
 
Riferimento: Curiosità e funzioni matematiche

Sì come ragionamento fila. Avevo pensato al teorema del seno e del coseno ma non ero sicuro potesse servire anche perché non penso che tu lo abbia studiato. Non è una cosa molto facile da capire ( bisognerebbe avere un minimo di basi di trigonometria ) però se vuoi ti linko i due teoremi :

Perfavore, Entra oppure Registrati per vedere i Link!

Perfavore, Entra oppure Registrati per vedere i Link!

Innanzi tutto ti ringrazio per tutte le risposte che mi dai e mi scuso per la mia testardaggine. Nelle pagine di Wikipedia che mi hai posto sembra che le regole postulate non parlino di come trovare l'ampiezza degli angoli no?
Ritornando al primo problema, con ciò che mi linkato riesco a trovare la lunghezza della retta. Quindi per il movimento ho pensato di muovermi in parti(quindi si potrebbe dividere il segmento in 10 o più parti), solo che dovrei trovare le cordinate di ogni parte, per muovermi. Sai come fare?
 
Riferimento: Curiosità e funzioni matematiche

Innanzi tutto ti ringrazio per tutte le risposte che mi dai e mi scuso per la mia testardaggine. Nelle pagine di Wikipedia che mi hai posto sembra che le regole postulate non parlino di come trovare l'ampiezza degli angoli no?

Il seno e il coseno sono delle funzioni che restituiscono l'ampiezza degli angoli.

Ritornando al primo problema, con ciò che mi linkato riesco a trovare la lunghezza della retta. Quindi per il movimento ho pensato di muovermi in parti(quindi si potrebbe dividere il segmento in 10 o più parti), solo che dovrei trovare le cordinate di ogni parte, per muovermi. Sai come fare?

Una volta trovata l'equazione della retta dipende dal valore che dai alla X...
 
Riferimento: Curiosità e funzioni matematiche

Scrivo qua, dopo un po di tempo in mia assenza, per non aprire, inutilmente, un altro post. Sono riuscito a far ruotare l'immagine trovando l'angolo facendo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Ora il problema resta il proiettile, ovvero fargli seguire una linea retta infinita. Sono riuscito a fargli seguire una linea retta, solo che si ferma nel punto del mouse e non prosegue all'infinito. Quindi il problema è, come farlo andare all'infinito?
Il codice che utilizzo è una funzione creata da me dove vengono indicati tutti i punti compresi fra una retta con origine nel punto A fino al punto B. Ora io vorrei farlo andare all'infinito o per lo meno fuori dalla schermata di gioco (in modo che non si noti che si è fermato) facendolo sempre andare nella stessa direzione.

Grazie.
@System32 @Garu
 
Ultima modifica:
Riferimento: Curiosità e funzioni matematiche

Per tracciare una retta hai bisogno solo di 2 punti, dal momento che la retta ( si suppone ) tu debba tracciarla da sinistra verso destra e dato che hai le coordinate del punto in cui il proiettile si ferma ti basterà incrementare, di quanto vuoi tu, l'ascissa e congiungere i punti dal punto dove si ferma il proiettile fino a quello stabilito da te, e così via.
 
Riferimento: Curiosità e funzioni matematiche

Per tracciare una retta hai bisogno solo di 2 punti, dal momento che la retta ( si suppone ) tu debba tracciarla da sinistra verso destra e dato che hai le coordinate del punto in cui il proiettile si ferma ti basterà incrementare, di quanto vuoi tu, l'ascissa e congiungere i punti dal punto dove si ferma il proiettile fino a quello stabilito da te, e così via.

Questo in caso che la linea non sia inclinata, ma se lo fosse? I punti dove posso sparare sono infiniti e infinite sono anche le direzioni in cui sparo. Anche aggiungendo una costante a X e Y il proiettile cambierebbe direzione.
 
Riferimento: Curiosità e funzioni matematiche

Non conosco soluzioni più semplici...tieni conto che le derivate le sto facendo io a scuola.

Ho visto che te hai fatto un gioco in XNA. Il codice dovrebbe essere lo stesso con cui tu fai muovere la pallina in una direzione. Se non sbaglio dovrebbe essere questo:
private void calculateBallVelocity(GameObject obj)
{
float variationX = Ball.Position.X - obj.Position.X;
float deviationAngle = (System.Math.Abs(variationX) / (obj.Sprite.Width / 2)) * (float)(System.Math.PI / 3);
float complementarAngle = MathHelper.PiOver2 - System.Math.Abs(deviationAngle);

float componentY = 3 * (float)System.Math.Sin(complementarAngle);
float componentX = 3 * (float)System.Math.Cos(complementarAngle);

if (variationX < 0)
componentX = -componentX;

if (Ball.Position.Y <= obj.Position.Y)
Ball.Velocity = new Vector2(componentX, -componentY);
else
Ball.Velocity = new Vector2(componentX, componentY);
}
Seguito da questo:
Ball.Position += Ball.Velocity;
 
Ultima modifica:
Riferimento: Curiosità e funzioni matematiche

Ho visto che te hai fatto un gioco in XNA. Il codice dovrebbe essere lo stesso con cui tu fai muovere la pallina in una direzione. Se non sbaglio dovrebbe essere questo:

Non so come sono organizzate le cose nel tuo progetto ma comunque potrebbe essere una base ma non credo che ti serva più di tanto.