AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  

 

 Atelier GML 3 - Trigonométrie, utilisation des lengthdir

Aller en bas 
+2
D-z
onilink_
6 participants
AuteurMessage
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptySam 1 Juin 2013 - 12:20

Atelier GML 3
Trigonométrie, utilisation des lengthdir

Bonjour, voici l'atelier GML 3, qui cette fois sera spécialisé autour d'une notion mathématique très utilisée en jeu vidéo, j'ai nommé la trigonométrie!

Trigonométrie

Un peu de théorie

Si l'on regarde wikipédia, il nous dit que la trigonométrie est...
Citation :
...une branche des mathématiques qui traite des relations entre distances et angles dans les triangles et des fonctions trigonométriques telles que sinus, cosinus et tangente.

Il y a deux mots importants dans cette phrase:
-distances
-angles

Si la trigonométrie traite des relations dans un triangle, mais elle nous servira surtout a obtenir une position en fonction d'une distance et d'un angle.
Représenter des coordonnées par un angle et une distance s'appelle un système de coordonnées polaires.

Il est donc possible de noter tout point p en fonction d'un angle 'a' et une distance 'r'.
Pour passer de coordonnées polaires a des coordonnées cartésiennes (donc x et y) il faut utiliser des fonction trigonométriques: cosinus et sinus.

x = cos(a) * r
y = sin(a) * r

Attention cependant, cos et sin sont des fonctions qui attendent un angle en radiant, soit un angle qui part de 0, jusqu'a 2pi (périmètre d'un cercle de rayon 1).
Une manière de convertir un angle en radiants et de faire: a*pi/180.
Sous GameMaker il y a donc plusieurs solutions, de la plus compliquée a la plus simple:
Code:
x = cos(a*pi/180)*r
y = sin(a*pi/180)*r
Code:
x = cos(degtorad(a))*r
y = sin(degtorad(a))*r
Code:
x = lengthdir_x(r, a)
y = lengthdir_y(r, a)

La première notation est vraiment lourde a écrire. La seconde plus claire mais tout de même assez longue. La troisième est très simple, et surtout très intuitive, on associe a x le lengthdir_x et a y le lengthdir_y; impossible de confondre!
Niveau optimisation, la troisième solution est bien plus rapide, par conséquent, si vous avez besoin de trigo, utilisez les lengthdir.

Note:
Attention cependant, le 3 ième code donné ci dessus n'est pas totalement égal aux 1 et 2. En réalité la fonction lengthdir fonctionne dans un repère à Y descendant, alors que cos/sin dans un repère à Y montant.
Donc pour lengthdir 90° c'est en haut (valeur négative) et pour sinus en bas (valeur positive).
Une raison de plus pour utiliser le lengthdir dans GM, car cela est plus adapté au monde du jeu vidéo.

En pratique

Tout cela peut paraître compliqué au premier abord mais c'est en réalité très simple.
Imaginons que nous avons une objet, et que nous voulons chaque step le bouger de 5 pixels a 30 degrés?

Et bien il suffit d'utiliser les coordonnées polaires (code a mettre dans step):
Code:
x += lengthdir_x(5, 30)
y += lengthdir_y(5, 30)

Il n'y a donc pas grand chose a dire de plus, ces fonctions lengthdir sont très simple a utiliser, et très utiles.
Donc ne vous en privez surtout pas!


Exercices

Exclamation Merci de poster vos réponses aux exercices en spoiler Exclamation

1 - Suivre la souris
Faites en code en 2 ou 3 lignes pour que votre objet suive la souris a la vitesse de 3 pixels par step.

2 - Cercle point a point
A l'aide de la fonction draw_point et de la trigonométrie, faites un code a mettre dans draw qui dessine 360 points et forme un cercle de rayon 80 pixels.

3 - Ellipse point a point
De la même manière, faites une ellipse (alignée aux axes, donc sans rotation) de largeur 110 et de hauteur 80 pixels.

4 - Personnage de fps
Faites des déplacements style fps vu de dessus, avec possibilité de tourner, avancer, reculer, esquiver sur les cotés.

5 - Menu rotatif
Faites un menu comme dans Sword of Mana avec un nombre variable d'éléments, positionnés de manière circulaire. Si vous appuyez sur gauche, le menu tourne d'un élément, pareil pour droite.
L'élément du haut est l'élément sélectionné, et doit être un peu agrandis.

6 - Spirale
Créez une fonction spirale qui dessine une spirale avec les paramètres suivants:
x et y la position d'affichage
turns le nombre de tours que doit faire la spirale
add l’incrémentation du rayon a chaque degres
p la précision d'affichage

7 - Spirographe
Plus difficile cette fois, écrivez une fonction spirographe qui prend les paramètres suivant et dessine un spirographe:
x et y la position d'affichage
r1 le rayon du grand cercle (celui ou l'on place le rouage pour dessiner
r2 le rayon du petit cercle (rouage ou l'ont place le crayon dans un trou pour dessiner)
r3 le rayon ou se trouve trou dans le petit cercle
p la precision de dessin
Spoiler:

Indices et solutions
Disponibles d'ici au maximum quelques jours.

Indice 1 - Suivre la souris
Spoiler:

Indice 2 - Cercle point a point
Spoiler:

Indice 3 - Ellipse point a point
Spoiler:

Indice 4 - Personnage de fps
Spoiler:

Indice 5 - Menu rotatif
Spoiler:

Indice 6 - Spirale
Spoiler:

Correction 1
Spoiler:

Correction 2
Spoiler:

Correction 3
Spoiler:

Correction 4
Spoiler:

Correction 6
Spoiler:

_________________
Atelier GML 3 - Trigonométrie, utilisation des lengthdir Runningpotato1Atelier GML 3 - Trigonométrie, utilisation des lengthdir TvF6GED Atelier GML 3 - Trigonométrie, utilisation des lengthdir MdetltS


Dernière édition par onilink_ le Sam 1 Juin 2013 - 15:12, édité 1 fois
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptySam 1 Juin 2013 - 14:51

Une erreur cher onilink_ : lengthdir et sin/cos fonctionnent toutes dans le sens direct (sens inverse des aiguilles d'une montre). La différence est que les fonctions sinus et cosinus sont des fonctions mathématiques, définies dans un repère à Y montant (origine en bas à gauche). Or en informatique, on utilise principalement le Y descendant (origine en haut à gauche), d'où lengthdir_y qui s'occupe d'inverser l'axe. Une exception notable est OpenGL qui par défaut utilise un repère à Y montant.

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptySam 1 Juin 2013 - 15:10

Ah okey, je savais pas que ça portais ce nom la, merci pour la remarque :b

_________________
Atelier GML 3 - Trigonométrie, utilisation des lengthdir Runningpotato1Atelier GML 3 - Trigonométrie, utilisation des lengthdir TvF6GED Atelier GML 3 - Trigonométrie, utilisation des lengthdir MdetltS
Revenir en haut Aller en bas
Mobi
Utilisateur confirmé: Rang ****
Mobi


Messages : 1256
Localisation : Dijon

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptySam 1 Juin 2013 - 17:08

Je ne comprend pas l'exo 3...
Z Q S D pour se déplacer et A E pour tourner ?

_________________
Atelier GML 3 - Trigonométrie, utilisation des lengthdir Penguin
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptySam 1 Juin 2013 - 20:59

Les touches que tu veux, a vrai dire c'est pas vraiment la chose importante dans l'exercice x)

_________________
Atelier GML 3 - Trigonométrie, utilisation des lengthdir Runningpotato1Atelier GML 3 - Trigonométrie, utilisation des lengthdir TvF6GED Atelier GML 3 - Trigonométrie, utilisation des lengthdir MdetltS
Revenir en haut Aller en bas
Invité
Invité




Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyDim 2 Juin 2013 - 0:30

Ma solution pour l'exercice 7 :

Spoiler:

Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
marty


Messages : 697
Projet Actuel : laby-ereinte !

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyDim 2 Juin 2013 - 13:14

salut,nice cet atelier!

exo 1:
Spoiler:

comment penser à utiliser ce genre de fonction pour faire bouger un perso?
avec tout les fonction qui existe déjà move to ,speed et compagnie !

ps: tu a une astuce simple pour que le perso ne tremble pas quand il est a la souris?

exo 2:
Spoiler:

exo3:
Spoiler:

exo4:
Spoiler:

exo 6 et 7 d'ici quelques années gnii

thx pour ton atelier!

_________________
Code:
rnd=>insight=>play

http://gamemaker.info/fr/manual



Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyDim 2 Juin 2013 - 16:14

Cool, j'ai compris l'utilisation des lengthdir que récemment mais qu'est ce que c'est pratique Yum! En plus grace à toi je viens de capter comment faire un arc de cercle awesome
Marty pour pas que ca tremble suffit de rajouter un if avec un point_distance Smile
Je posterai demain un exemple de viseur pour fusil de chasse (qui tire 3 balles avec un angle différent) que j'utilise pour mon jeu Smile

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
marty


Messages : 697
Projet Actuel : laby-ereinte !

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyDim 2 Juin 2013 - 18:54

(me suis dit qu'il utilisait peut être un autre code,vu comment il fait bouger les objets !)

requête:

à quand un atelier "game making" qui passerait en revu les différents style de jeu!
casse_brique, tower défense,jeu de course,plateforme (déjà survoler précédemment),jeu de lettre ..

du plus simple au plus compliquer.svp.




_________________
Code:
rnd=>insight=>play

http://gamemaker.info/fr/manual



Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyDim 2 Juin 2013 - 21:10

marty a écrit:
à quand un atelier "game making" qui passerait en revu les différents style de jeu!
casse_brique, tower défense,jeu de course,plateforme (déjà survoler précédemment),jeu de lettre ..

du plus simple au plus compliquer.svp.
Je plussoie, ca pourrait etre très utile pour tous les nouveaux qui savent pas comment faire, ni meme par ou commencer Smile
Moi je veux bien en faire un, je vais avoir du temps libre ces vacances Smile

edit : pour le viseur :
Code:
dist=point_distance(heros.x,heros.y,mouse_x,mouse_y);
        dir=point_direction(heros.x,heros.y,mouse_x,mouse_y);
        draw_line(heros.x+lengthdir_x(dist-16,dir),heros.y+lengthdir_y(dist-16,dir),heros.x+lengthdir_x(dist,dir),heros.y+lengthdir_y(dist,dir));
        draw_line(heros.x+lengthdir_x(dist-16,dir-3),heros.y+lengthdir_y(dist-16,dir-3),heros.x+lengthdir_x(dist,dir-3),heros.y+lengthdir_y(dist,dir-3));
        draw_line(heros.x+lengthdir_x(dist-16,dir+3),heros.y+lengthdir_y(dist-16,dir+3),heros.x+lengthdir_x(dist,dir+3),heros.y+lengthdir_y(dist,dir+3));
Ca dessine les trois lignes où passerons les 3 balles tirées avec pour direction celle entre le héros et la souris, telle quelle, incrémentée de 3° ou diminué de 3° (je sais pas si c'est très clair Yum! ), en fonction de la distance entre le héros et la souris.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyLun 3 Juin 2013 - 16:13

marty>
Nickel tes codes, pour la saccade yep un point_distance et c'est bon Wink

Quand aux ateliers dont tu parles je comptais les faire a la sortie d'onidev. Je pense arrêter de faire du contenu pour GM car vu la tournure que prennent les choses, c'est plus trop la peine...
Pour ce qui est des lengthdir c'est surtout une notion mathématique a saisir, d'ou l'atelier.

_________________
Atelier GML 3 - Trigonométrie, utilisation des lengthdir Runningpotato1Atelier GML 3 - Trigonométrie, utilisation des lengthdir TvF6GED Atelier GML 3 - Trigonométrie, utilisation des lengthdir MdetltS
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
marty


Messages : 697
Projet Actuel : laby-ereinte !

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyLun 3 Juin 2013 - 21:58

Citation :
Quand aux ateliers dont tu parles je comptais les faire a la sortie d'onidev. Je pense arrêter de faire du contenu pour GM car vu la tournure que prennent les choses, c'est plus trop la peine...
me doute que tu perd ton temps avec GM.

(c'est plus ce que c'était ,à savoir un petit soft pas cher (voir gratuit) ,bien foutu (tout en un) ,accessible qui permettait à tout à chacun, avec un tout petit peu d'effort de faire des jeux variés ,mais pas seulement il introduisait au monde de la programmation avec des fonctions facilement compréhensible ,et était fédérateur ,car modulable par ses utilisateurs...tout une philosophie ...)

merci de ton investissement sur ce forum (j'en profite largement) ,et serait t'il possible de regrouper tes tutoriels et autres dans un fichier d'aide chm? (mais je me répète je crois gnii )

enfin, si on peux t'aider à te faire avancer dans onidev (dans la mesure de nos capacités hein !) n'hésite pas, t'a un fan club ici! clinoeuil

d'ailleurs peux tu donner même approximativement une échéance de sortie ?









_________________
Code:
rnd=>insight=>play

http://gamemaker.info/fr/manual



Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyMar 4 Juin 2013 - 16:28

Pour le fichier chm j'ai pas vraiment le temps de le faire, et pour la sortie d'onidev je peut pas prévoir malheureusement :/
Mais d'ici la fin des grandes vacances (donc vers septembre) je devrait sortir un version utilisable.

_________________
Atelier GML 3 - Trigonométrie, utilisation des lengthdir Runningpotato1Atelier GML 3 - Trigonométrie, utilisation des lengthdir TvF6GED Atelier GML 3 - Trigonométrie, utilisation des lengthdir MdetltS
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
marty


Messages : 697
Projet Actuel : laby-ereinte !

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyMar 4 Juin 2013 - 22:10

nop !

début septembre gnii
la pression qu'on va te mettre alors, d'ici là! Yum!




_________________
Code:
rnd=>insight=>play

http://gamemaker.info/fr/manual



Revenir en haut Aller en bas
3nder
Débutant
3nder


Messages : 13
Projet Actuel : tank

Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: re utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir EmptyMer 5 Juin 2013 - 1:36

EURÉKA Event - Create
Revenir en haut Aller en bas
Contenu sponsorisé





Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty
MessageSujet: Re: Atelier GML 3 - Trigonométrie, utilisation des lengthdir   Atelier GML 3 - Trigonométrie, utilisation des lengthdir Empty

Revenir en haut Aller en bas
 
Atelier GML 3 - Trigonométrie, utilisation des lengthdir
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» conversion trigonometrie
» lengthdir et place_free
» Atelier GML 1 - Fonctions et variables
» Recherche intervenant atelier création jeu vidéo
» Atelier GML 2 - Conditions, opérateurs booléens et scripts

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Game Maker-
Sauter vers: